了解不同的#define声明

时间:2019-03-28 16:15:56

标签: c macros

我有一个代码库,它使用#define的方式与我习惯的方式不同。

我知道,例如,#define a 5将在代码中将变量a替换为5。

但这意味着什么:

'#define MSG_FLAG 5, REG, MSGCLR'

我试图用一个简单的代码来完成并编译它。它采用最后一个值(例如第三个参数为MSGCLR)。

1 个答案:

答案 0 :(得分:5)

预处理基本上只是在“真实”编译开始之前进行的字符串替换。因此,我们目前尚不清楚变量是什么。

此处的逗号不是任何特殊语法。这将导致代码中MSG_FLAG的任何出现都被5, REG, MSGCLR

代替

大多数编译器都有一个标志,可以公正运行预处理器,因此您可以自己查看。在gcc上,这是-E。

因此,为验证这一点,我们可以提供一些废话来源:

#define MSG_FLAG 5, REG, MSGCLR

MSG_FLAG

使用gcc -E test.c

进行编译

输出为:

# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "test.c"


5, REG, MSGCLR