相关疑难解决方法(0)

预处理器输出

在将C预处理器转换为目标文件之前,如何查看C预处理器生成的输出?

我想看看MACRO定义对我的代码做了什么.

macros gcc c-preprocessor

35
推荐指数
5
解决办法
3万
查看次数

C预处理器#和##运算符

C99标准文档具有相关的##预处理运算的部分下面的例子:

在以下片段中:

#define hash_hash # ## #
#define mkstr(a) # a
#define in_between(a) mkstr(a)
#define join(c, d) in_between(c hash_hash d)

char p[] = join(x, y); // equivalent to
                       // char p[] = "x ## y";
Run Code Online (Sandbox Code Playgroud)

扩张在不同阶段产生:

join(x, y)
in_between(x hash_hash y)
in_between(x ## y)
mkstr(x ## y)
"x ## y"
Run Code Online (Sandbox Code Playgroud)

换句话说,扩展hash_hash会产生一个新的令牌,由两个相邻的尖锐符号组成,但这个新令牌不是##运算符.

我不明白为什么hash_hash的替换产生##而不是"##"或"#""#".在双哈希播放之前和之后单个哈希有什么作用?

任何回复都非常感谢.

c concatenation c-preprocessor

16
推荐指数
1
解决办法
9910
查看次数

用逗号分隔的多个值的宏实际上是什么意思?

当我在招聘过程中尝试技术考试时,我遇到了一个问题,其中包含如下所示的宏:

#define random 2,4
Run Code Online (Sandbox Code Playgroud)

这是什么意思?如何用逗号为单个宏定义两个值?

c macros c-preprocessor

2
推荐指数
1
解决办法
93
查看次数

标签 统计

c-preprocessor ×3

c ×2

macros ×2

concatenation ×1

gcc ×1