【发布时间】:2019-01-26 08:54:06
【问题描述】:
根据我的阅读,我了解到# 运算符与参数宏一起使用以将其参数转换为字符串,## 用于连接两个参数或带有其他标识符的参数(如果我的理解是错误的)。
但是我怎样才能同时使用# 和## 运算符呢?我尝试过这样做:
#define str(n) #n ## #n
我当时想
printf("%s",str(Hello))
将扩展为
printf("%s", "Hello""Hello")
由于相邻的字符串会自动连接以在 C 中形成一个字符串,因此这将导致 printf("%s", "HelloHello") 并且输出将是HelloHello。但故事不同,它抛出了一个错误:
粘贴“hello”和“hello”不会给出有效的预处理令牌
请解释一下这些带有# 和## 运算符的参数宏是如何扩展的。
【问题讨论】:
-
它“抛出”了什么错误?
-
错误:粘贴“hello”和“hello”没有给出有效的预处理令牌
标签: c c-preprocessor preprocessor-directive