0

在此代码片段中,我希望 MatrixMultiplication() 方法中的“printf”命令显示其文本。它没有,即使“size”已在前一行声明并且“test”设置为 1。这是代码:

void MatrixMultiplication(float * M, float * N, float * P, int Width, int test)
{
        int size = Width * Width * sizeof(float);

        #if defined size
        if (test)
        {
                printf("Should be equal to %d.  Int size:%d", Width * Width * sizeof(float), size);
        }
        #endif
}

int main (int argc, char ** argv)
{

        // Omitted for brevity...

        int test = 1;                                                   

        // Omitted for brevity...

        MatrixMultiplication(hostM, hostN, reference, atoi(matrix_id), test);

        // Omitted for brevity...

}

我正在使用以下命令进行编译:

nvcc -I/home/sbu/NVIDIA_GPU_Computing_SDK/C/common/inc -L/home/sbu/NVIDIA_GPU_Computing_SDK/C/lib -o matrixmul matrixmul.cu -lcutil_x86_64

nvcc 是否有某些东西使这种“#if defined”命令不起作用?我之前在使用 gcc 的本机C和 C++ 代码中使用过这种语法,它工作得很好。

对这个问题的任何启发都会很棒!

这是关于 Pastebin 的完整代码:http: //pastebin.com/SusnpgFc

4

2 回答 2

2

它没有,即使“大小”已在前一行声明

测试是否已定义具有该名称的#if defined size预处理器宏,它不检查是否在程序中声明了具有该名称的变量。

#define size只有当你有一个或#define size some replacement tokens之前,它才会评估为真。

于 2012-10-31T21:04:07.380 回答
1

预处理是在编译之前完成的。所以当预处理器检查这个时:

#if defined size

size没有在任何地方定义,所以它被替换为0. 因此,整个if代码段在传递给编译器之前不会被删除。

于 2012-10-31T21:04:42.923 回答