C预处理器#if表达式

标签 c c-preprocessor

我对 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/

相关文章:

c++ - C中的MAX和MIN是什么? #定义函数

gcc - Fortran #define 多行宏定义

c - 自引用结构定义?

c - 使用 getchar() 检测按键

c - 如何计算 mst 图的成本。

c++ - 里面有if的宏?

添加到类型名称的 C 宏

c - (c/c++) 日/月/年 hh :ii:ss to unix timestamp

C中的自定义冒泡排序

c++ - 是否有某些关键字不应该是我的 "#defined"?