• 预处理器&预处理变量&头文件保护&条件编译


    【常见的预处理功能】

    1. #include
    2. 头文件保护符
    3. 条件编译

    【预处理器】

      编译之前执行的一段程序,可以部分地改变我们所写的程序

      举个例子:当预处理器看到#include标记时就会用指定的头文件的内容代替#include

     

    【预处理变量】

      不属于命名空间std,由预处理器负责管理

      预处理变量有两种状态:已定义和未定义

      当用到一个预处理变量时,预处理器会自动地将它替换为实际值。

    【头文件保护符】

      使用预处理变量以防止头文件被某个文件重复包含。

      4个指令:#define、#ifdef、#ifndef、#endif

    • #define:把一个名字设定为预处理变量
    • #ifdef及#ifndef:检查某个指定的预处理变量是否已经定义
    • #ifdef:当且仅当变量已定义时为真
    • #ifndef:当且仅当变量未定义时为真
    • 一旦结果检查为真,则执行后续操作直至遇到#endif指令为止。

      注:预处理变量无视C++关于作用域的规则。

    【条件编译】

    当不希望对源程序所有内容都进行编译时,我们可以使用“条件编译”。

    预处理程序提供了条件编译的功能,条件编译有三种形式:#ifdef 、#ifndef 、#if

    1. #ifdef形式的条件编译

    #ifdef 标识符
    	程序段1
    #else
    	程序段2
    #endif 
    

    注:如果标识符已被#define定义过,则对程序段1进行编译,而不编译程序段2,直到遇到#endif

    2. #ifndef形式的条件编译

    #ifndef 标识符
    	程序段1
    #else
    	程序段2
    #endif
    

    注:与#ifdef相反,即标识符没有被#define定义过,才编译程序段1。

    3. #if形式的条件编译

    #if 常量表达式 
    	程序段1
    #else
    	程序段2
    #endif 
    

    注:如果常量表达式的值为真(非0),则对程序段1进行编译,否则对程序段2进行编译

  • 相关阅读:
    从 0 配置 webpack(一)
    Redux
    React Hooks 全解(二)
    日本人要把核污水排进大海,我突然想到几个问题
    突然发现,我的代码还花花绿绿的,挺好看的
    Ghidra ,改道吧,我也准备改道这玩意了
    语音控制?这,看起来很眼熟。
    winafl 工具的编译
    关于 TX 的 WeGame 的一点疑问
    新年的第一个随笔,随便写写吧
  • 原文地址:https://www.cnblogs.com/xzxl/p/7647389.html
Copyright © 2020-2023  润新知