“## b”在C中的含义是什么?
发布时间:2020-12-16 10:10:37 所属栏目:百科 来源:网络整理
导读:参见英文答案 Reading Zend Engine API code: What does ## (double hash) mean?????????????????????????????????????3个 来自usbtiny / defs.h(ATTiny控制器的AVR libc USB代码): #define CAT2(a,b) CAT2EXP(a,b)#define CAT2EXP(a,b) a ## b#define CAT3
参见英文答案 >
Reading Zend Engine API code: What does ## (double hash) mean?????????????????????????????????????3个
来自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,c) #define CAT3EXP(a,c) a ## b ## c 什么是##运算符?我已经这样做了30年了,我很难过.谷歌没有帮助,因为我不认为他们正在索引这些字符. 解决方法
宏定义中的##符号表示串联.
所以 #define concat(a,b) a ## b 意思是 concat (pri,ntf) ("hello worldn"); 后处理到 printf("hello worldn"); 文件here. 同样有用的是stringify运算符(#),不应混淆它. 一个测试: /* 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 worldn"); exit (0); } 为什么额外的间接水平?正如Deduplicator在评论中指出他的答案如下,没有它,它将连接指定的字面术语,而不是宏替换术语.这种陷阱的有用清单是here. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |