预处理
1、宏定义
2、条件编译
3、文件包含
注意:
1、所有预处理都是以#开头,并且结尾不用分号.
2、宏名一般用大写字母,以便与变量名区别开来,但用小写也没有语法错误
3、作用域也是从定义到代码块结束
4、定义一个宏时可以引用已经定义的宏名
5、在编译预处理用字符串替换宏名时,不作语法检查,只是简单的字符串替换。只有在编译的时候才对已经展开宏名的源程序进行语法检查
一、宏定义
1、不带参数的宏定义
#define 宏名 字符串
#define COUNT 6
2、带参数的宏定义
#define 宏名(参数列表) 字符串
#define sum(va,vb) ((va)+(vb))
注意:每个参数都要加括号,运算结果也要加括号
若需要提前取消宏定义可用 #undef COUNT实现。
代码示例
1 //宏名一般用大写字母,以便与变量名区别开来,但用小写也没有语法错误 2 //1、宏定义1,不带参数的宏定义,常用来定义常量 3 #define COUNT 6//后面么有‘;‘ 4 5 #include <stdio.h> 6 //1、宏定义2,带参数的宏定义,每个参数都要加括号,运算结果也要加括号 7 #define sum(v1,v2) ((v1)+(v2)) 8 9 10 int main() 11 { 12 //1、宏定义使用 13 int array[COUNT] = {1,2,3,4,5,6}; 14 for (int i = 0; i < COUNT; i++) 15 { 16 printf("%d ",array[i]); 17 } 18 #undef COUNT //提前取消宏定义 19 //带参数的宏 20 printf("\n%d\n",sum(10,20)); 21 printf("%d\n",sum(3,3)*sum(4,4));//这样实际运行效果是3+3*4+4=19,因为宏只是简单的文本替换,所以定义时加()比较好 22 23 //2、条件编译 24 25 26 return 0; 27 }
二、条件编译
满足条件就对代码进行编译,否则不编译。
#if 条件1
.....
#elif 条件
......
#else
.....
#endif//不可缺少
1 #define COUNT 6//后面么有‘;‘ 2 //2、条件编译,一般判断宏的值,不能对变量进行操作 3 #if(COUNT == 6) 4 printf("条件编译:%d\n",COUNT); 5 #elif (COUNT == 4) 6 7 #else 8 9 #endif//不可缺少
#if defined()和#if !defined()的使用
#if defined(COUNT)//COUNT是一个宏,如果定义这个宏就执行下面的代码 ...code...#endif
#if !defined(COUNT)//COUNT是一个宏,如果没有定义这个宏就执行下面的代码 ...code...#endif
代码:
1 //#if defined()和#if !defined()的用法 2 #if defined (COUNT)//如果定义宏就编译下面代码,否则不编译 3 printf("defined:%d\n",COUNT); 4 #endif 5 6 #if !defined (COUNT1)//如果定义宏就编译下面代码,否则不编译 7 printf("! defined\n"); 8 #endif
#ifdef和#ifndef的使用
#ifdef COUNT//COUNT是一个宏,如果定义这个宏就编译下面的代码 ...code... #endif
#ifndef COUNT//COUNT是一个宏,如果没有定义这个宏就编译下面的代码 ...code... #endif
代码:
1 //#ifdef和#ifndef的使用 2 #ifdef COUNT//如果定义宏就编译下面代码,否则不编译 3 printf("ifdef:%d\n",COUNT); 4 #endif 5 6 #ifndef COUNT1//如果定义宏就编译下面代码,否则不编译 7 printf("ifndef\n"); 8 #endif
三、文件包含
#include
#include <>//系统头文件
#include ""//自定义的头文件
文件包含可能会重复包含同一个文件,这是可以再要包含的文件中添加一个宏定义,用于消除重复包含。
格式如下
#ifndef A_H
#def A_H
..........
#endif
这样即使多次#include同一个头文件也不会产生文件的重复性包含
2015-4-14 今日如此,明日依旧。
时间: 2024-10-29 04:46:57