在这段代码中,我希望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
答案 0 :(得分:2)
它没有,即使已经在前一行声明了“大小”
#if defined size
测试是否已定义具有该名称的预处理器宏,它不检查是否在程序中声明了具有该名称的变量。
如果您之前有#define size
或#define size some replacement tokens
,则只会评估为真。
答案 1 :(得分:1)
预编译在编译之前完成。因此,当预处理器检查时:
#if defined size
size
未在任何地方定义,因此已替换为0
。因此,在传递给编译器之前,整个if
代码段不会被删除。