码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-09-19 20:21:56      阅读:410      评论:0      收藏:0      [点我收藏+]

标签:erro   log   strong   typedef   cout   介绍   return   baidu   int()   

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

 

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

标签:erro   log   strong   typedef   cout   介绍   return   baidu   int()   

原文地址:http://www.cnblogs.com/chenhuan001/p/7553829.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!