zoukankan      html  css  js  c++  java
  • C[6] 预处理器

    C[6] 预处理器

    预处理器指编译器在实际编译之前完成所需的预处理。C 预处理器(C Preprocessor)简写CPP。它不是编译器的组成部分,是编译过程中一个单独的步骤(可以理解为文本替换工具)。

    1、预处理器指令(以(#)号开头。)

    • #define   //定义宏
    • #include   //包含一个源代码文件
    • #undef   //取消已定义的宏
    • #ifdef   //如果宏已经定义,则返回真
    • #ifndef   //如果宏没有定义,则返回真
    • #if      //如果给定条件为真,则编译下面代码
    • #else   //#if 的替代方案
    • #elif     //如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码
    • #endif   //结束一个 #if……#else 条件编译块
    • #error   //当遇到标准错误时,输出错误消息
    • #pragma   //使用标准化方法,向编译器发布特殊的命令到编译器中

    示例:

    #define MAX_LENGTH 10    //定义常量  把所有的 MAX_LENGTH 的值替换为 10
    #include <stdio.h>    // 从系统库中获取 stdio.h,并添加文本到当前的源文件中
    #include "myTest.h"   // 从本地目录中获取 myTest.h,并添加内容到当前的源文件中。
    #undef  FILE_SIZE    //取消已定义的 FILE_SIZE 值
    #define FILE_SIZE 20   //重新定义FILE_SIZE的值为20
    //当 MESSAGE 未定义时,定义 MESSAGE的值。
    #ifndef MESSAGE
       #define MESSAGE "Hello TaoRoy!"
    #endif
    

    2、预处理器运算符  

    2.1 连接或延续 运算符(\) 和  字符串常量化运算符(#)

    #include <stdio.h>
    #define  PrintMessage(a, b)  \     //宏通常写在单行上,太长,则使用“\”运算符连接
        printf(#a#b ": i am fine!\n")    //“#”把一个宏的参数转换为字符串常量.    结果:TaoRoy:i am fine!
    
    int main(void)
    {
       PrintMessage(Tao,Roy);
       return 0;
    }
    

    2.2 标记粘贴运算符(##)

    #include <stdio.h>
    #define Test(a) printf ("Tao" #a " = %d", Tao##a) //(##)合并两个参数(Tao 和 a)
    
    int main(void)
    {
      int Tao520 = 1314;
      Test(520); //输出:Tao520 = 1314
      return 0;
    }

    2.3 defined() 运算符

    #include <stdio.h>
    #if !defined (MESSAGE) //如果没有定义 MESSAGE 这个宏的值,则定义
      #define MESSAGE "Hello TaoRoy!"
    #endif
    
    int main(void)
    {
      printf("Output: %s\n", MESSAGE); //输出:Output:Hello TaoRoy!
      return 0;
    }
    

    3、宏的参数化( #define )

    #include <stdio.h>
    /* 
    int XiangJia(int x) {
       return x + x;
    }
     */
    #define XiangJia(x) ((x) + (x))    //模拟函数 XiangJia  
    #define Max(x,y) ((x) > (y) ? (x) : (y))
    //注意:参数列表是括在圆括号内,且必须紧跟在宏名称的后边。宏名称和左圆括号之间不允许有空格。
    
    int main(void)
    {
       printf("1相加的值: %d\n", XiangJia(1));     //输出:1相加的值:2
       printf("1和2最大值是: %d\n", Max(1, 2));    //输出:1和2最大值是:2
       return 0;
    }

    4、其他预定义的宏(可以使用,但是不能直接修改)

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

    示例:

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

      

      

     

    创建时间:2021.11.04  更新时间:

  • 相关阅读:
    js文字跳动效果
    js文字效果
    centos7安装Logwatch配合msmtp邮件客户端发送服务器监控分析日志
    子查询
    Hexo添加字数统计、阅读时长
    基于visual Studio2013解决C语言竞赛题之0523魔方阵
    基于visual Studio2013解决C语言竞赛题之0522和为素
    基于visual Studio2013解决C语言竞赛题之0521圆盘求和
    基于visual Studio2013解决C语言竞赛题之0520相邻元素
    基于visual Studio2013解决C语言竞赛题之0519最大值
  • 原文地址:https://www.cnblogs.com/guorongtao/p/15506978.html
Copyright © 2011-2022 走看看