zoukankan      html  css  js  c++  java
  • C/C++ #define的作用域

    #define

    #define macro的作用域有点类似于C/C++全局静态变量
    
    编译器处理宏的时机是预处理阶段 编译器按文本顺序处理 遇到宏时就定义一个宏变量
    
    假设这种情况
    
    void test() {
    #define MACRO 1
    }
    
    int main() {
    #ifdef MACRO
    // do some thing
    #endif
    }
    main函数也是看得到MACRO宏的 因为文本顺序上test在前
    编译器处理到test时定义了一个宏变量 使得main也能“看见“这个宏
    
    假如把顺序交换
    int main() {
    #ifdef MACRO
    // do some thing
    #endif
    }
    
    void test() {
    #define MACRO 1
    }
    main就看不见MACRO宏了

    不同源文件中的宏

    不同源文件是看不到互相定义的宏的 除非将宏定义在了头文件中
    
    宏的机制类似于全局变量 一般情况不会暴露给另一个源文件 除非你特意在头文件中暴露了它
    
    #a.c
    #define CX 1
    
    #b.c
    int main() {
    #ifdef CX
    //不会被执行 因为看不到这个宏
    #endif
    }
  • 相关阅读:
    web页面静态化与伪静态化
    mysql 优化之空间换时间
    QPS、PV、UV、RT 之间的关系
    接口
    MySQL 索引
    名词解释
    go 语言标识符
    Git版本控制与工作流
    Maven安装与配置
    IDEA工具使用说明
  • 原文地址:https://www.cnblogs.com/jiangxiaobo/p/11199026.html
Copyright © 2011-2022 走看看