-- TOC --
每当gcc
编译器遇到__COUNTER__时,它都会被替换成一个int数字,这个数字从0开始,每次+1。
#include <stdio.h>
int main(){
printf("%d\n", __COUNTER__);
printf("%d\n", __COUNTER__);
printf("%d\n", __COUNTER__);
printf("%d\n", __COUNTER__);
return 0;
}
输出:
0
1
2
3
这个技术,常常被用来生成一些为一的标识,clang
也支持。
下面是linux内核中的定义:
/* same as gcc, this was present in clang-2.6 so we can assume it works
* with any version that can compile the kernel
*/
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
测试代码:
#include <stdio.h>
#define __CON(a,b) a##b
#define _CON(a,b) __CON(a,b)
#define PASTE(a) _CON(_CON(a,_), __COUNTER__)
int main(){
int PASTE(a) = 123;
int PASTE(a) = 234;
printf("%d\n",a_0);
printf("%d\n",a_1);
return 0;
}
本文链接:https://cs.pynote.net/sf/c/202303111/
-- EOF --
-- MORE --