宏定义

来源:互联网 发布:小众聊天软件 编辑:程序博客网 时间: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
原创粉丝点击