预处理器#if指令

我正在写一个很大的代码,我不希望它都在我的main.c中,所以我写了一个带有函数的IF-ELSE语句的.inc文件,我想知道它是这样编写的:

#if var==1 process(int a) { printf("Result is: %d",2*a); } #else process(int a) { printf("Result is: %d",10*a); } #endif 

我试图编译它,但它给了我错误,或者在最好的情况下,它只是在第一个函数进程上没有检查var变量(它被设置为0)。

预处理器不“知道”任何变量的值,因为它甚至在编译之前就可以工作,而不是在运行时。

在预处理器#if的条件下,您只能评估#if符号和常量表达式。

您显示的特定示例可以简单地转换为:

 printf("Result is: %d", (var == 1 ? 2: 10) * a); 

刚刚完成。 对于符合标准的编译器,您的代码始终是正确的。 在#if表达式计算中,预处理器未知的所有标识符#if替换为0 (如果需要,则替换为false)。 因此,在您的特定情况下,如果var只是一个变量而不是宏,则结果将始终是函数的第二个版本。

对于您为MS报告的错误:我确实知道MS编译器不符合标准,但我不知道它们甚至不满足这些基本语言要求。

这就是你想要的:

 process(int a) { if (var == 1) printf("Result is: %d",2*a); else printf("Result is: %d",10*a); } 

重要的是要记住预处理器是它自己的程序,而不是你正在编写的程序的一部分。 变量“var”(或此处表示的var)不在预处理程序标识符的名称空间中。