我对可以与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;
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*urr 25
预处理器不能在表达式中使用C程序中的变量 - 它只能作用于预处理器宏.因此,当您尝试c在预处理器中使用时,您无法获得预期的结果.
但是,您也不会收到错误,因为当预处理器尝试评估未定义为宏的标识符时,它会将标识符视为值为零.
所以当你点击这个片段时:
#if c==1
#define check(a) (a==1)?a:5
#define TABLE_SIZE 100
#endif
Run Code Online (Sandbox Code Playgroud)
该c预处理器采用了无关变量c从C程序.预处理器查看是否有定义的宏c.由于没有,它会评估以下表达式:
#if 0==1
Run Code Online (Sandbox Code Playgroud)
这当然是假的.
由于您似乎没有c在程序中使用该变量,因此您可以执行以下操作以获得与您尝试的内容一致的行为:
#define C 1
#if C==1
#define check(a) (a==1)?a:5
#define TABLE_SIZE 100
#endif
Run Code Online (Sandbox Code Playgroud)
(请注意,我还将宏名称设置为大写,以符合宏名称的约定.)
在完成任何编译之前,预处理器会在文本上运行。它不知道如何解析 C。你可能想要的int c=1;是
#define C 1
Run Code Online (Sandbox Code Playgroud)
测试按照您的方式进行:
#if C == 1
Run Code Online (Sandbox Code Playgroud)
这里的关键是这都是在编译之前定义的。预处理器不关心 C 变量,当然也不关心它们的值是什么。
请注意,约定是在ALL_CAPS.
| 归档时间: |
|
| 查看次数: |
25297 次 |
| 最近记录: |