宏定义的灵活使用
- 最近看源码的时候,发现一个比较好玩的,直接贴我自己写的demo
demo1.h
#ifndef __demo1_h__
#define __demo1_h__
#define date1_t int
#undef TYPE
#define TYPE 1
#include "template.h"
#endif
demo2.h
#ifndef __demo2_h__
#define __demo2_h__
#define date2_t char
#undef TYPE
#define TYPE 2
#include "template.h"
#endif
template.h
#ifndef __template_h__
#define __template_h__
#include <stdio.h>
#define _bv(a,b) a##b
#define __bv(a,b) _bv(a,b)
#define BV(a) __bv(a,TYPE)
#define _bvt(a,b) a##b##_t
#define __bvt(a,b) _bvt(a,b)
#define BVT(a) __bvt(a,TYPE)
#endif
void BV (demo)(BVT (date) a){
printf("fun name =%s\n",__FUNCTION__);
printf("demo1_t %d\n",a);
printf("demo2_t %c\n",a);
printf("----------------------------------\n");
}
demo.h
#include <stdio.h>
#include "demo1.h"
#include "demo2.h"
void demoall(int a){
printf("----------------------------------\n");
if (a%2==1){
demo1(a);
}
else{
demo2(a);
}
}
main.c
#include <stdio.h>
#include "demo.h"
void main(){
demoall(1);
demoall(50);
while(1){
}
}
编译
gcc main.c
- 执行生成的a.out
查看预处理过程
gcc -E main.c