标签:
1、#define <头文件名> //引用头文件 例如:#define _STDIO_H_ ==#include<stdio.h> 2、#define <宏名> < 数据(表达式)> //宏定义<宏名>为<数据(表达式)>,在预处理时替换 例如:#define PI 3.1415 //在编译时,编译器会将字符串中的‘PI’除外的所有‘PI’出现的地方全部替换为3.1415 #define H (a*b) //在编译时,编译器会将字符串中的‘H’除外的所有‘H’出现的地方全部替换为(a*b) 3、#define <宏名>(<参数名>) <表达式> //宏定义函数<宏名>加<参数>,编译时会替代成<表达式> 例如:#define max(a,b) ((a)>(b)?(a):(b)) //这是大家经常会遇到的一个求较大值的函数(暂且让我称它为函数吧) /*(1)与一般函数相比:宏函数会在编译时直接替代,不用传参,没有内存空间,相对省资源;宏函数编译时编译器不会检查语法等错误,若出现错误,要人工检查;但是宏函数不限制处理的参数数据类型,int能用,float也能用,一般函数则只能适应定义时的参数类型,若要多重适应,还得用函数重载,编码先对纠结。 (2)与内联函数相比:内联函数也是在编译时直接带到调用处,也不用传参数;但是内联函数在编译时,编译器会检查其语法等错误;内联函数除了没有内存占用,没有调用传参外,其余与一般函数一样,在调用时也受定义的参数数据类型限制。 (3)与函数模板相比:都是能适应多中数据类型的处理,(我对函数模板还没学好,回头再写)*/ 4、#undef <宏名> //解除<宏名>的宏定义,(若同一个宏名被多次定义,编译时会报错,需解除宏定义,再重新宏定义) 例如:#undef H //‘H’已经被宏定义过了,现在要解除'H'的宏定义 5、#if define <宏名> XXXXXX #endif //如果<宏名>已经被定义过了,则执行‘XXXXXX’语句,否则,直接跳到#endif后面继续执行 例如:#if define H //如果‘H’被宏定义过了(一般用于重新定义) #udef H //解除‘H’的宏定义 #define H 345//将‘H’定义为‘345’ #endif 6、#elif <条件> //如果前面的条件不为真,则编译后面的代码 7、#if !define <宏名> XXXXXX #endif //如果<宏名>未被定义过了,则执行‘XXXXXX’语句,否则,直接跳到#endif后面继续执行 例如:#if define H //如果‘H’未被宏定义过(防止重定义) #define H 345//将‘H’定义为‘345’ #endif 8、#ifndef <宏名> //与5基本相同 XXXXXX #endif //如果<宏名>未被定义过了,则执行‘XXXXXX’语句,否则,直接跳到#endif后面继续执行 例如:#ifndef H //如果‘H’未被宏定义过(防止重定义) #define H 345 //将‘H’定义为‘345’ #endif 9、#error <报错信息> //一般和条件判断结合使用,用于给定报错信息 例如:#ifndef __cplusplus //当编译器不是C++编译器时,报错 #error 亲,您当前使用的不是C++编译器噢! #endif #include <stdio.h> int main() { printf("Hello,World!"); return 0; } </span>
标签:
原文地址:http://blog.csdn.net/huahua520amy/article/details/43481849