我对 C 语言中#IF 预处理器可以使用的表达式类型有点困惑。我尝试了以下代码,但它不起作用。请解释并提供可与预处理器一起使用的表达式示例。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int c=1;
#if c==1
#define check(a) (a==1)?a:5
#define TABLE_SIZE 100
#endif
int main()
{
int a = 0, b;
printf("a = %d\n", a);
b = check(a);
printf("a = %d %d\n", a, TABLE_SIZE);
system("PAUSE");
return 0;
}
最佳答案
预处理器不能在表达式中使用 C 程序中的变量——它只能作用于预处理器宏。因此,当您尝试在预处理器中使用 c
时,您不会得到预期的结果。
但是,您也不会收到错误,因为当预处理器尝试计算未定义为宏的标识符时,它将标识符视为值为零。
所以当你点击这段代码时:
#if c==1
#define check(a) (a==1)?a:5
#define TABLE_SIZE 100
#endif
预处理器使用的c
与C 程序中的变量c
无关。预处理器查看是否有为 c
定义的宏。由于没有,它计算以下表达式:
#if 0==1
这当然是错误的。
由于您似乎没有在您的程序中使用变量 c
,您可以执行以下操作以获得与您正在尝试的行为一致的行为:
#define C 1
#if C==1
#define check(a) (a==1)?a:5
#define TABLE_SIZE 100
#endif
(请注意,为了符合宏名称的约定,我还将宏名称设为大写。)
关于C预处理器#if表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6362622/