Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 预处理器指令中的行是否正确?_C_C Preprocessor - Fatal编程技术网

C 预处理器指令中的行是否正确?

C 预处理器指令中的行是否正确?,c,c-preprocessor,C,C Preprocessor,这两种代码之间的区别是什么: #define check 0 int main(void) { #if check this is a normal line #endif return 0; } 还有这个: int main(void) { /* this is a normal line */ return 0; } 它们是否完全相同?是的,只是第一个代码不会编译为#define check;-) 不,它们不一样 #define check 0 int main(void) {

这两种代码之间的区别是什么:

#define check 0

int main(void)
{
#if check
this is a normal line
#endif
return 0;
}
还有这个:

int main(void)
{
/*
this is a normal line
*/
return 0;
}

它们是否完全相同?

是的,只是第一个代码不会编译为
#define check
;-)

不,它们不一样

#define check 0

int main(void) {
  #if check
  this is a normal line
  #endif

  return 0;
}
编译时,此段完全取决于预处理的
检查值
的值,当前为
0
。由于在预处理
if endif
之间编译代码的唯一条件是
check
0 | 1
值,因此在运行时,它们是相同的。但是,如果将
check
更改为
1
,它也会编译条件行


在编译时,第一段处理
#define check 0
,而第二段显然不必这样做,只是忽略注释。

你知道,你可以直接运行,它们不一样。@Sabrina我无法想象为什么代码“ud”很有用,但它是用来代替注释代码的常用习惯用法(不起作用或需要更改的代码)是使用
#ifdef 0
。无论如何,在第一个示例中,如果check未编译为
check
,则代码包装为
。在第二个示例中,没有宏检查,因此main中的任何内容(假设它有效)将运行。@Sabrina的可能副本
#ifdef 0
有什么不正确之处?它的作用与
#如果在代码中选中
,则完全相同,只是对其他人来说它更通用。@George您可能是指
#如果0
#ifdef 0
无效,因为
#ifdef
的参数必须是标识符,而不是数字。