• 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就执行,否则就跳过

  • 相关阅读:
    Spring Security(09)——Filter
    Spring Security(08)——intercept-url配置
    Spring Security(07)——缓存UserDetails
    Spring Security(06)——AuthenticationProvider
    Spring Security(05)——异常信息本地化
    Spring Security(04)——认证简介
    xss小总结
    xss hack学习靶场 writeup
    sqlmap使用
    sqli-labs writeup(less1---less38)
  • 原文地址:https://www.cnblogs.com/Iwpml-595/p/10368934.html
Copyright © 2020-2023  润新知