C 预处理器#if指令
我正在编写一个大代码,我不希望所有代码都在main.c中,因此我编写了一个.inc文件,其中包含函数IF-ELSE语句,我想知道它是否可以这样编写:C 预处理器#if指令,c,if-statement,C,If Statement,我正在编写一个大代码,我不希望所有代码都在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 我试图编译它,但它给了我错误,或者在最好的情况下,它只是在第一个函数过程中进行,而没有检查
#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
的情况下,您只能计算#定义'd符号和常量表达式
您正在展示的特定示例可以简单地转换为:
printf("Result is: %d", (var == 1 ? 2: 10) * a);
预处理器不“知道”任何变量的值,因为它甚至在编译之前就开始工作,而不是在运行时
在预处理器#if
的情况下,您只能计算#定义'd符号和常量表达式
您正在展示的特定示例可以简单地转换为:
printf("Result is: %d", (var == 1 ? 2: 10) * a);
只是为了完成。对于符合标准的编译器,您的代码总是正确的。在#if
表达式求值中,预处理器不知道的所有标识符都被替换为0
(如果需要,也可以为false)。因此,在您的特定情况下,如果var
只是一个变量而不是一个宏,那么结果将始终是函数的第二个版本
对于您为MS报告的错误:我确实知道MS编译器不符合标准,但我不知道它们甚至不能满足这些基本的语言要求。仅此而已。对于符合标准的编译器,您的代码总是正确的。在#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”(或此处表示的任何变量)不在预处理器标识符的命名空间中。这是您想要的:
process(int a)
{
if (var == 1)
printf("Result is: %d",2*a);
else
printf("Result is: %d",10*a);
}
请务必记住,预处理器是它自己的程序,而不是您正在编写的程序的一部分。变量“var”(或此处表示的任何变量)不在预处理器标识符的命名空间中。您得到了什么错误?“给我错误”显示它们。如何设置var<代码>#定义var 0
?是否希望在编译时只包含其中一个方法?您遇到了什么错误?@Bart我正在使用cygwin c-compiler在NetBeans中工作,在那里它没有显示任何错误,并且从第一个函数开始,但在MS Visual Studio 2010中编译时,它会显示:“错误c3861:‘进程’:找不到标识符”(并且只有一个函数是活动的预处理器块,而另一个没有)我在main.c中将var定义为全局变量。您得到了什么错误?“给我错误”显示它们。如何设置var<代码>#定义var 0
?是否希望在编译时只包含其中一个方法?您遇到了什么错误?@Bart我正在使用cygwin c-compiler在NetBeans中工作,在那里它没有显示任何错误,并且从第一个函数开始,但在MS Visual Studio 2010中编译时,它会显示:“错误c3861:‘进程’:找不到标识符”(并且只有一个函数是活动的预处理器块,而另一个没有)我在main.c中将var定义为全局变量。我将使用#define'd变量尝试您的建议。你给我看的例子是正确的,但这只是一个简单的函数。我有很多很多的定义、函数等等,所以我认为最简单的分离方法是使用#if else。我将尝试你的建议,使用#define’d变量。你给我看的例子是正确的,但这只是一个简单的函数。我有很多很多的定义、函数等等,所以我认为最简单的方法就是用#if else来区分它们。