常用预处理命令及解释

#define 定义一个预处理宏    
    #define  标识符  字符串
    #define  NUM//这种也有意义
    #define  宏名(形参表)  字符串
 
#undef  取消宏的定义  
 
#if 编译预处理中的条件命令,相当于C语法中的if语句    #if 常量 
          ...程序段1...
          #else
          ...程序段2...
          #endif 
           这里表示,如果常量为真(非0,随便什么数字,只要不是0),就执行程序段1,否则执行程序段2。
 
#ifdef  判断某个宏是否被定义,若已定义,执行随后的语句 #ifdef _XXXX
          ...程序段1...
          #else
          ...程序段2...
          #endif
        这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
 
#ifndef 与#ifdef相反,判断某个宏是否未被定义   #ifndef _XXXX 
          ...程序段1... 
          #else 
          ...程序段2... 
          #endif
           这里使用了#ifndef,表示的是if not def。当然是和#ifdef相反的状况(如果没有定义了标识符_XXXX,那么执行程序段1,否则执行程序段2)
 
#elif   若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句,相当于C语法中的else-if
        #if xxx
        yyy
        #elif xx
        yy
 
#else   与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行#else之后的语句,相当于C语法中的else
        #if xxx
        yyy
        #else
        yy
#endif  #if, #ifdef, #ifndef这些条件命令的结束标志 
 
defined 宏函数, 常与#if, #elif配合使用,判断某个宏是否被定义
        #if defined a #undef a 
        #define a 200 
        #endif 
        上述语句检验a是否被定义,如果被定义,则用#undef语句解除定义,并重新定义a为200 
 
#error  多为编译器在预处理遇到错误时调用,也可手动输入 指令让预处理器发出一条错误信息,并且会中断编译过程。
        
#pragma pack    我们可以利用#pragma pack来改变编译器的对齐方式:指定对齐有什么用呢,大概就是可以避免了移植过程中编译器的差异带来的代码隐患吧。比如两个编译器的默认对齐方式不一样,那可能会带来一些bug。 
        #pragma pack(n)  /* 下面代码指定按n字节对齐 */
        。。。
        #pragma pack()   /* 取消自定义字节对齐 */
 
#pragma message 该指令用于在预处理过程中输出一些有用的提示信息 
 
##  把俩个字符串粘在一起  

#    运算符,它可以把语言符号转化为字符串。

posted @ 2020-11-24 11:26  594C  阅读(88)  评论(0编辑  收藏  举报