Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是##&引用;你喜欢C语言吗?_C_Operators_C Preprocessor - Fatal编程技术网

什么是##&引用;你喜欢C语言吗?

什么是##&引用;你喜欢C语言吗?,c,operators,c-preprocessor,C,Operators,C Preprocessor,可能重复: 在搜索我开发的操作系统(在嵌入式项目上)的一些C代码时,我发现以下定义语句: #define concatn(s1, s2) s1 ## s2 我从未见过“##”操作符,在认真搜索了一段时间后,我找不到它的任何参考。这是怎么回事 我已经搜索了操作系统源代码,但找不到任何对字符串“##”的引用,该字符串被定义为其他形式的C运算符。这是标准C,还是这可能/可能是编译器的一个功能?它是预处理器的一部分,用于连接令牌,concatn(x,y)被xy替换这是标准C预处理器字符串连接运算符

可能重复:

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

#define concatn(s1, s2) s1 ## s2
我从未见过“##”操作符,在认真搜索了一段时间后,我找不到它的任何参考。这是怎么回事


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

它是预处理器的一部分,用于连接令牌,
concatn(x,y)
xy
替换这是标准C预处理器字符串连接运算符

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

例如:

concatn(a_, b) = 1;
宏将执行以下操作:

a_b = 1;
##
是C语言中的令牌粘贴操作符。它用于连接两个令牌

例如:

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


在预处理器中创建标记
name1

连接,您不必使用“我感觉很幸运”按钮太多了,但在这里效果很好。嗯,我不知道我的谷歌上下文是怎么回事,但谷歌在搜索时往往会忽略特殊字符。我尝试的每一次搜索都会将结果返回到通用的C运算符列表中——其中没有一个包含“##”操作员。事实上,我打开了很多这样的页面并在页面中搜索——在任何地方都找不到这个问题。@H2CO3:您链接的问题并不是这个问题的先例——它更多地是关于一个技术细节,而不是关于##操作员的。是的,我读过这个问题——这不是一个重复的问题,当然也不是一个“精确”的问题。
PASTE(name, 1)