Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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 预处理器#if指令_C_If Statement - Fatal编程技术网

C 预处理器#if指令

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 我试图编译它,但它给了我错误,或者在最好的情况下,它只是在第一个函数过程中进行,而没有检查

我正在编写一个大代码,我不希望所有代码都在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
的情况下,您只能计算
#定义
'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来区分它们。