gcc #define 学习记录

//test.c 

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


//字符串化运算符
#define EXPAND(name) ({ \
		printf("%s\n", #name); })

//二元运算符 ## 将左和右操作数结合成一个记号

#define test(name, index) ( { \
		int i, len = sizeof(name ## index) / sizeof(int); \
		for (i = 0; i < len; i++) \
		{                          \
		printf("%d\n", name ## index[i]);  \
		}}) 



int main(int argc, char *argv[]) {
	EXPAND(Test);
	EXPAND("\"TEST");

	EXPAND(__DATE__);
	EXPAND(__TIME__);
	EXPAND(__FILE__);
	EXPAND(__LINE__);
	EXPAND(__func__);
	int x1[] = { 1, 2, 3 };
	int x2[] = { 11, 22, 33, 44, 55};
	test(x, 1);
	test(x, 2);

	return 0;
}

  运行效果如下:

 1 $ ./defind_test
 2 Test
 3 "\"TEST"
 4 __DATE__
 5 __TIME__
 6 __FILE__
 7 __LINE__
 8 __func__
 9 1
10 2
11 3
12 11
13 22
14 33
15 44
16 55

 

posted @ 2014-03-22 01:44  sndnvaps  阅读(801)  评论(0)    收藏  举报