[英]Preprocessor #if directive
我正在编写一个大代码,但我不希望所有这些都在main.c中,所以我写了一个.inc文件,其中包含带有功能的IF-ELSE语句,我想知道是否可以这样写:
#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
你只能评估#define
倒是符号和常量表达式。
您所显示的特定示例可以简单地转换为:
printf("Result is: %d", (var == 1 ? 2: 10) * a);
这就是你想要的:
process(int a)
{
if (var == 1)
printf("Result is: %d",2*a);
else
printf("Result is: %d",10*a);
}
重要的是要记住,预处理器是其自己的程序,而不是您正在编写的程序的一部分。 变量“ var”(或此处表示的var)不在预处理器标识符的名称空间中。
刚刚完成。 对于符合标准的编译器,您的代码将始终是正确的。 在#if
表达式求值中,预处理器不知道的所有标识符都简单地替换为0
(如果需要,则为false)。 因此,在您的特定情况下,如果var
只是变量而不是宏,则结果将始终是函数的第二个版本。
对于您为MS报告的错误:我确实知道MS编译器不符合标准,但是我不知道它们甚至不能满足这种基本语言要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.