#define

作者: 黄卡卡 | 来源:发表于2017-07-27 22:11 被阅读0次

    简单的#define定义

    #define MAXTIME 1000
    一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写 if(i<MAXTIME){.........}编译器在处理这个代码之前会对MAXTIME进行处理替换为1000.这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为define的定义更像是简单的文本替换,而不是作为一个量来使用。


    #define的函数定义

    define可以像函数那样接受一些参数,如下
    #define max(x,y) (x)>(y)?(x):(y);
    但是存在隐患
    比如:

    #define pin (int*);
    pin a,b;
    

    本意是a和b都是int型指针,但是实际上变成int* a,b; a是int型指针,而b是int型变量。 这是应该使用typedef来代替define,这样a和b就都是int型指针了。 所以我们在定义的时候,养成一个良好的习惯,建议所有的层次都要加括号。


    #define的多行定义

    define可以替代多行的代码,例如MFC中的宏定义

    #define MACRO(arg1, arg2) 
    do { \ 
    /* declarations */ \ 
    stmt1; \ 
    stmt2; \
     /* ... */ \ 
     } while(0) /* (no trailing ; ) */ 
    

    关键是要在每一个换行的时候加上一个"\" 。


    #define的条件编译

    在大规模的开发过程中,特别是跨平台和系统的软件里,define最重要的功能是条件编译
    就是:
    #ifdef XXX…(#else) … #endif

    #ifdef DV22_AUX_INPUT 
    #define AUX_MODE 3  
    #else  
    #define AUY_MODE 3 
    #endif
    

    可以在编译的时候通过#define设置编译环境

    如何定义宏,取消宏

    //定义宏  
    #define [MacroName] [MacroValue] 
    //取消宏  
    #undef [MacroName] 
    //普通宏 
    #define PI (3.1415926) 
    //带参数的宏
    #define max(a,b) ((a)>(b)? (a),(b))//这个要慎用
    

    头文件(.h)可以被头文件或C文件包含

    重复包含(重复定义) 由于头文件包含可以嵌套,那么C文件就有可能包含多次同一个头文件,就可能出现重复定义的问题的。 通过条件编译开关来避免重复包含(重复定义) 例如

    #ifndef __headerfileXXX__ 
    #define __headerfileXXX__ 
    …  
    //文件内容 
    … 
    #endif
    //#ifdef的使用和#if defined()的用法一致 
    //#ifndef又和#if !defined()的用法一致。
    

    重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。

    typedef  unsigned char      boolean;     /* Boolean value type. */ 
    typedef  unsigned long int  uint32;      /* Unsigned 32 bit value */ 
    typedef  unsigned short     uint16;      /* Unsigned 16 bit value */ 
    typedef  unsigned char      uint8;       /* Unsigned 8  bit value */ 
    typedef  signed long int    int32;       /* Signed 32 bit value */ 
    typedef  signed short       int16;       /* Signed 16 bit value */ 
    typedef  signed char        int8;        /* Signed 8  bit value */
    

    参考百度文库

    相关文章

      网友评论

          本文标题:#define

          本文链接:https://www.haomeiwen.com/subject/vatgkxtx.html