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

 

posted @ 2017-09-19 20:08  chenhuan001  阅读(3886)  评论(0编辑  收藏  举报