美文网首页
C语言中的预处理器(二)

C语言中的预处理器(二)

作者: 王伯卿 | 来源:发表于2018-05-12 10:49 被阅读0次

    预定义宏

    ANSI C 定义了许多宏。在编程中您可以使用这些宏,但是不能直接修改这些预定义的宏。简而言之,预定义宏就是C中已经定义的量,我们可以使用,但是不能直接修改。

    描述
    __DATE__ 当前日期,一个以 "MMM DD YYYY" 格式表示的字符常量。
    __TIME__ 当前时间,一个以 "HH:MM:SS" 格式表示的字符常量。
    __FILE__ 这会包含当前文件名,一个字符串常量。
    __LINE__ 这会包含当前行号,一个十进制常量。
    __STDC__ 当编译器以 ANSI 标准编译时,则定义为 1。

    我们可以看一下实例:

    #include <stdio.h>
    
    int main(void)
    {
       printf("File :%s\n", __FILE__ );
       printf("Date :%s\n", __DATE__ );
       printf("Time :%s\n", __TIME__ );
       printf("Line :%d\n", __LINE__ );
       printf("ANSI :%d\n", __STDC__ );
    }
    

    它会产生如下结果:

    File :test.c
    Date :Jun 2 2012
    Time :03:36:24
    Line :8
    ANSI :1

    预处理器运算符

    这边我们涉及到4个运算符。

    1.宏延续运算符(\)

    一个宏通常写在一个单行上,如果太长,可以用该符号折行再写。例如:

    #define  message_for(a, b)  \
        printf(#a " and " #b ": We love you!\n")
    

    2.字符串常量化运算符(#)

    把宏中所给的参数转化为字符串常量。

    #include <stdio.h>
    
    #define  message_for(a, b)  \
        printf(#a " and " #b ": We love you!\n")
    
    int main(void)
    {
       message_for(Carole, Debra);
       return 0;
    }
    

    会有结果:

    Carole and Debra: We love you!

    3.标记粘贴运算符(##)

    ##将会合并两个参数成为一个标记,例如n=34,那token##n将会是token34。请看下例:

    #include <stdio.h>
    
    #define tokenpaster(n) printf ("token" #n " = %d", token##n)
    
    int main(void)
    {
       int token34 = 40;
       
       tokenpaster(34);
       return 0;
    }
    

    结果如下:

    token34 = 40

    4.defined() 运算符

    预处理器 defined 运算符是用在常量表达式中的,用来确定一个标识符是否已经使用 #define 定义过。如果指定的标识符已定义,则值为真(非零)。如果指定的标识符未定义,则值为假(零)。下面的实例演示了 defined() 运算符的用法:

    #include <stdio.h>
    
    #if !defined (MESSAGE)
       #define MESSAGE "You wish!"
    #endif
    
    int main(void)
    {
       printf("Here is the message: %s\n", MESSAGE);  
       return 0;
    }
    

    结果输出:

    Here is the message: You wish!

    参数化的宏

    用CPP模拟函数,应该可以长生更高的效率。

    #include <stdio.h>
    
    #define MAX(x,y) ((x)>(y)?(x):(y))
    #define SQUARE(x) ((x)*(x))
    
    int main(void){
      printf("Max between 20 and 10 is %d\n",MAX(20,10));
      printf("The square of 5 is %d\n",SQUARE(5));
      return 0;
    }
    

    相关文章

      网友评论

          本文标题:C语言中的预处理器(二)

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