zoukankan      html  css  js  c++  java
  • C/C++预处理器

    关于预处理器

    首先时预处理器的条件指令

    什么是预处理指令?

    预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。

    以前没有在意的学者注意了,预处理指令是在编译器进行编译之前进行的操作.预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。在很多编程语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码(防止重复包含某些文件)。要完成这些工作,就需要使用预处理程序。尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。预处理过程还会删除程序中的注释和多余的空白字符。


    1. #空指令,无任何效果
    2. #include包含一个源代码文件
    3. #define定义宏
    4. #undef取消已定义的宏
    5. #if如果给定条件为真,则编译下面代码
    6. #ifdef如果宏已经定义,则编译下面代码
    7. #ifndef如果宏没有定义,则编译下面代码
    8. #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
    9. #endif结束一个#if……#else条件编译块
    10. #error停止编译并显示错误信息

    举个简单的例子,对于平常我们进行注释的语句可以不再使用/**/而是使用

    #if  n
    cout <<"balabalabala“<<endl;
    .
    .
    .
    #endif

    中间的内容是否执行就取决于n,如果n不为0就执行,否则就跳过

  • 相关阅读:
    django2.0+连接mysql数据库迁移时候报错
    微信小程序路由跳转
    洛谷P3144 [USACO16OPEN]关闭农场Closing the Farm
    洛谷P3143 [USACO16OPEN]钻石收藏家Diamond Collector
    洛谷P2677 超级书架 2
    洛谷P2676 超级书架
    洛谷P3146 [USACO16OPEN]248
    洛谷P1396 营救
    洛谷P1772 [ZJOI2006]物流运输
    P3102 [USACO14FEB]秘密代码Secret Code
  • 原文地址:https://www.cnblogs.com/Iwpml-595/p/10368934.html
Copyright © 2011-2022 走看看