一.宏定义:
宏定义是采用原样替换。
#define M 10
#define CALL(x) (x*x) 或 #define CALL() () //
printf("result=%d\n",CALL(M+M)); // gcc -E 文件名.c -o 文件名.i (预处理)
%d CALL() 须有结果
#define TEST
#define CALC (x) printf(#x"=%d\n",x) // 字符串化处理
不定参数宏
#define show(fm,...) printf(fm,__VA_ARGS__) // 保持相同的格式
rm -rf *.i //删除所有的 .i 文件
int main(int argc,char* args[]) // 参数个数 参数内容(以字符串形式出现)(指针数组)
{
函数体;numi=args[1]-'0';
}
条件编译:
通常在多文件编译中运用。
#define DEBUG
#if 宏名(0 / 1) //#ifndef DEBUG (if no define)
模块一
#else
模块二
#endif
extern int ASD 或 extern void show
联合体
大小 至少是最大成员大小
6666666666666666666 // 7
union Myunion
{
char a;
int i;
};
printf("");
枚举
(整数类型) (若没设置则从 0 开始 依次赋值)
有可读性 维护性 类型检查 更加严谨 (与宏定义相比 可定义多个)
#include <stdio.h>
struct S{
int a:8;
int b:4;
int c:4;
};
int main(){
struct S s={0};
printf("%ld\n",sizeof(s));
return 0;
}