C语言预处理学习记录

#include<stdio.h>

#define LOCAL //无参宏

//条件编译 
#ifdef LOCAL
int a=1;
#else
int a=2;
#endif

#ifndef LOCAL
int b=1;
#else 
int b=2;
#endif

#define PI 3.1415926535 //有参宏

#define max_wrong(a,b) a>b?a:b
#define max(a,b) ((a)>(b)?(a):(b))
#define maxwell(a,b) ({\
	__typeof(a) _a=(a),_b=(b);\
	_a>_b?_a:_b;\
}) 

#define DEBUG//

#ifdef DEBUG
#define log(frm,args...) {\
	printf("[%s %s %d] : %s = ",__FILE__,__func__,__LINE__,#args);\
	printf(frm,##args);\
}
#else
#define log(frm,args...)
#endif

int main(){
	printf("a = %d b = %d\n",a,b);
	printf("max_wrong(2,max_wrong(3,4)) = %d\n",max_wrong(2,max_wrong(3,4)));
	//展开后: 2>3>4?3:4?2:3>4?3:4 实际执行 ((2>3>4)?(3):(4))? (2) : (3>4?3:4)
	//使用 -E 编译选项获得预编译结果 
	printf("max(2,max(3,4)) = %d\n",max(2,max(3,4)));
	
	int a=1;
	printf("%d\n",max(a++,0));
	log("%d\n",a);
	a=1;
	log("%d\n",maxwell(a++,0));
	log("%d\n",a);
	
	log("Hello world");
	return 0;
}
posted @ 2020-02-27 18:26  chwhc  阅读(188)  评论(1编辑  收藏  举报