我有一个代码库,它使用#define的方式与我习惯的方式不同。
我知道,例如,#define a 5
将在代码中将变量a替换为5。
但这意味着什么:
'#define MSG_FLAG 5, REG, MSGCLR'
我试图用一个简单的代码来完成并编译它。它采用最后一个值(例如第三个参数为MSGCLR)。
答案 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