我有一个代码库,它以与我习惯的方式不同的方式使用#define。
我知道,例如,#define a 5将在代码中用5替换变量a。
但这意味着什么:
'#define MSG_FLAG 5, REG, MSGCLR'
Run Code Online (Sandbox Code Playgroud)
我尝试用一个简单的代码来完成它并进行编译。它采用最后一个值(例如第三个参数为MSGCLR)。
预处理基本上只是在“实际”编译开始之前进行的字符串替换。因此,我们目前对变量是什么一无所知。
这里的逗号不是任何特殊语法。这将导致MSG_FLAG代码中的任何出现都被替换为5, REG, MSGCLR
大多数编译器都有一个只会运行预处理器的标志,因此您可以自己查看。在gcc上,这是-E。
因此,为了验证这一点,我们可以使用一些废话来源:
#define MSG_FLAG 5, REG, MSGCLR
MSG_FLAG
Run Code Online (Sandbox Code Playgroud)
编译 gcc -E test.c
输出为:
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "test.c"
5, REG, MSGCLR
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |