宏定义
来源:互联网 发布:小众聊天软件 编辑:程序博客网 时间:2024/05/29 21:35
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’ #endif6、#elif <条件> //如果前面的条件不为真,则编译后面的代码7、#if !define <宏名> XXXXXX #endif //如果<宏名>未被定义过了,则执行‘XXXXXX’语句,否则,直接跳到#endif后面继续执行例如:#if define H //如果‘H’未被宏定义过(防止重定义) #define H 345//将‘H’定义为‘345’ #endif8、#ifndef <宏名>//与5基本相同 XXXXXX #endif //如果<宏名>未被定义过了,则执行‘XXXXXX’语句,否则,直接跳到#endif后面继续执行例如:#ifndef H //如果‘H’未被宏定义过(防止重定义) #define H 345//将‘H’定义为‘345’ #endif9、#error <报错信息> //一般和条件判断结合使用,用于给定报错信息例如:#ifndef __cplusplus //当编译器不是C++编译器时,报错 #error 亲,您当前使用的不是C++编译器噢! #endif #include <stdio.h> int main() { printf("Hello,World!"); return 0; }</span>
0 0