【发布时间】:2020-09-22 13:30:18
【问题描述】:
在 C99 6.10.3.3.(2) 中(我的亮点)
如果在类函数宏的替换列表中,一个参数紧跟在前面 或后跟##预处理标记,参数替换为对应的 参数的预处理标记序列;但是,如果参数由 no 组成 预处理标记,该参数被替换为地标预处理标记
#include <stdio.h>
#define hash_hash(a, b) a ## b
#define mkstr(a) # a
#define in_between(a) mkstr(a)
void main(void)
{
char p[] = in_between(a hash_hash(,) b);
printf("%s", p);
}
输出:
a b
我用hash_hash(,) 描述了突出显示的短语,结果似乎作为标准的表示是正确的。
但我想知道是否省略了逗号,,如hash_hash(),那么这与标准的解释不同(未定义的行为)吗? placemaker 和空格一样吗?
【问题讨论】:
标签: c language-lawyer c-preprocessor