• c++ typedef和#define的作用范围


    typedef:

    如果放在所有函数之外,它的作用域就是从它定义开始直到文件尾;

    如果放在某个函数内,定义域就是从定义开始直到该函数结尾;

    #define:

    不管是在某个函数内,还是在所有函数之外,作用域都是从定义开始直到整个文件结尾。

    define在同一编译单元内部,就算在不同的命名空间内,其作用范围不变。也就是从定义处一直到文件介绍。

    看下面这个例子:

    Main.cpp

     /**
     * @file Main.cpp
     * @author chenjiashou(chenjiashou@baidu.com)
     * @date 2017/09/19 17:37:33
     * @version $Revision$ 
     * @brief 
     *  
     **/
    
    #include <iostream>
    #include "test1.h"
    #define LL 2
    
    typedef long long ll;
    
    void test_typedef() {
    
    typedef int x_int;
    x_int a = 1;
    
    }
    
    namespace other {
    
    #define OTHER
    //不在乎是否在命名空间中
    //关键在一个编译单元
    }
    
    int main() {
    #ifdef LL
        std::cout << "LL define" << std::endl;
    #endif
    
    #ifdef SS
        std::cout << "SS define" << std::endl;
    #endif
    
    #ifdef OTHER
        std::cout << "OTHER define" << std::endl;
    #endif
    
        ll a = 1;
        print();
        //x_int b = 1;//compile error
        return 0;
    }
    
    /* vim: set ts=4 sw=4 sts=4 tw=100 */

    test1.h

     /**
     * @file test1.h
     * @author chenjiashou(chenjiashou@baidu.com)
     * @date 2017/09/19 17:39:05
     * @version $Revision$ 
     * @brief 
     *  
     **/
    #ifndef TEST1_H
    #define TEST1_H
    
    #endif  // TEST1_H
    
    void print();
    
    /* vim: set ts=4 sw=4 sts=4 tw=100 */

    test1.cpp

     /**
     * @file test1.cpp
     * @author chenjiashou(chenjiashou@baidu.com)
     * @date 2017/09/19 17:36:15
     * @version $Revision$ 
     * @brief 
     *  
     **/
    
    #include <iostream>
    #define SS 1
    
    void print() {
    #ifdef SS 
        std::cout << "SS define" << std::endl;
    #endif
    
    #ifdef LL
        std::cout << "LL define" << std::endl;
    #endif
    
    //    ll c = 1; //compile error
    //    std::cout << c << endl;
    }
    /* vim: set ts=4 sw=4 sts=4 tw=100 */

    最后结果:

    LL define
    OTHER define
    SS define
  • 相关阅读:
    2018年12月9日 带小苗苗打针 函数2 前向引用 函数即变量
    2018年12月8日 函数变量与递归
    2018年12月7日 字符串格式化2 format与函数1
    2018年12月6日 字符串拼接 %的用法
    2018年11月29日 16点50分 小苗苗出生了
    2018年11月27日 分类与集合
    2018年11月26日 练习3
    2018年11月25日 练习2
    2018年11月24日 周末学习1 字典2
    2018年11月22日 字典 E18灯翼平整度 D&G is SB
  • 原文地址:https://www.cnblogs.com/chenhuan001/p/7553829.html
Copyright © 2020-2023  润新知