“##”在C中做了什么?

时间:2012-10-09 19:50:24

标签: c operators c-preprocessor

  

可能重复:
  C preprocessor and concatenation
  C preprocessor # and ## operators

在搜索我开发的操作系统的某些C代码(在嵌入式项目中)时,我发现了以下定义语句:

#define concatn(s1, s2) s1 ## s2

我从未见过“##”运算符,经过一些严肃的谷歌搜索后,我找不到任何引用。这是怎么回事?

我已经搜索了OS源代码,我找不到任何对字符串“##”的引用被定义为其他形式的C运算符。这是标准C,还是这可能/可能是编译器的一个特性?

4 个答案:

答案 0 :(得分:4)

它是预处理器的一部分,标记的串联,concatn(x,y)xy取代。

答案 1 :(得分:4)

##是C中的令牌粘贴运算符。它用于连接两个令牌。

示例:

#define PASTE(front, back) front ## back

然后

PASTE(name, 1)    

创建令牌name1

答案 2 :(得分:3)

这是标准的c预处理器字符串连接运算符

答案 3 :(得分:2)

它用于连接两个令牌(在本例中为s1和s2)。更多细节here。它是标准的C预处理,因此每个符合标准的编译器都应该处理它。

例如:

concatn(a_, b) = 1;

将宏转为:

a_b = 1;
相关问题