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
的参数必须是标识符,而不是数字。