C中的“ a ## b”是什么意思?

叙事者

从usbtiny / defs.h(ATTiny控制器的AVR libc USB代码):

#define CAT2(a,b)               CAT2EXP(a, b)
#define CAT2EXP(a,b)            a ## b
#define CAT3(a,b,c)             CAT3EXP(a, b, c)
#define CAT3EXP(a,b,c)          a ## b ## c

什么是##运算符?我已经这样做了30年,但我很沮丧。谷歌没有帮助,因为我不认为他们索引这些字符。

bl

##宏定义中符号表示串联。

所以

#define concat(a,b) a ## b

意味着

concat (pri, ntf) ("hello world\n");

后处理到

printf("hello world\n");

文档在这里

字符串化运算符(#同样有用,不要与之混淆。

一个测试:

/* test with
 *    gcc -E test.c
 * having removed the #include lines for easier to read output
 */

#include <stdio.h>
#include <stdlib.h>

#define concat(a,b) a ## b

int
main (int argc, char **argv)
{
  concat (pri, ntf) ("Hello world\n");
  exit (0);
}

以及为什么需要额外的间接级别?正如Deduplicator在下面对他的答案的评论中所指出的那样,如果不这样做,它将连接指定的文字字词,而不是宏替换字词。这些陷阱的有用清单在这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

[&]在C ++中是什么意思

来自分类Dev

*(int *)在C ++中是什么意思?

来自分类Dev

在B树中,“键”到底是什么意思?

来自分类Dev

在Scala中,案例类的“扩展(A => B)”是什么意思?

来自分类Dev

C ++中的代码是什么意思?

来自分类Dev

:在C中是什么意思?

来自分类Dev

“ !!”是什么意思 在haskell中是什么意思?

来自分类Dev

**在C ++中是什么意思?

来自分类Dev

在C中,“&”号是什么意思?

来自分类Dev

Excel公式中的“ $”是什么意思?例如:$ B $ 4

来自分类Dev

^在C ++中是什么意思?

来自分类Dev

目标c中的&=是什么意思?

来自分类Dev

-c是什么意思?

来自分类Dev

**在C中是什么意思?

来自分类Dev

(void)在c ++中是什么意思?

来自分类Dev

`是什么意思!-b`在此Bash命令中?

来自分类Dev

C中的“流”是什么意思?

来自分类Dev

在python中,a <b <c是什么意思?

来自分类Dev

*-end()在C ++中是什么意思?

来自分类Dev

在C ++中,^(){}和^ {}是什么意思?

来自分类Dev

Excel公式中的“ $”是什么意思?例如:$ B $ 4

来自分类Dev

* a = * b在C中是什么意思?

来自分类Dev

-c是什么意思?

来自分类Dev

\ b在grep模式中是什么意思?

来自分类Dev

$ {var / a / b / \ c}是什么意思?

来自分类Dev

“在b中返回a”是什么意思?

来自分类Dev

bash中的“ 1B63”是什么意思?

来自分类Dev

a = b == c 在swift中是什么意思

来自分类Dev

Python 中的“a==('a' or 'b')”是什么意思?