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 = ; } 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 = ;
print();
//x_int b = 1;//compile error
return ;
} /* 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的作用范围的更多相关文章

  1. typedef 与 #define的区别

    typedef 与 #define的区别 整理于一篇经典blog,经典原文地址http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.ht ...

  2. typedef 和 #define 的区别

    本文已迁移至: http://www.danfengcao.info/c/c++/2014/02/25/difference-between-define-and-typedef.html typed ...

  3. typedef与#define的区别

    1.  typedef typedef故名思意就是类型定义的意思,但是它并不是定义一个新的类型而是给已有的类型起一个别名,在这一点上与引用的含义类似,引用是变量或对象的别名,而typedef定义的是类 ...

  4. typedef 和define的区别

    总结一下typedef和#define的区别 1.概念 #define 它在编译预处理时进行简单的替换,不作正确性检查.它是预处理指令. typedef 它在自己的作用域内给一个已经存在的类型一个别名 ...

  5. typedef和#define的用法与区别

    typedef和#define的用法与区别 typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程 ...

  6. typedef 与define 的区别

    typedef和#define的用法与区别   typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译 ...

  7. typedef 优于 #define

    案例一: 通常讲,typedef要比#define要好,特别是在有指针的场合.请看例子: typedef char *pStr1; #define pStr2 char *; pStr1 s1, s2 ...

  8. typedef和#define的区别

    转自:http://www.cnblogs.com/kerwinshaw/archive/2009/02/02/1382428.html 一.typedef的用法在C/C++语言中,typedef常用 ...

  9. typedef与define

    一.typedef用法 typedef常用来定义一个标识符及关键字的别名,它生效是在语言编译过程,但它并不实际分配内存空间.typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性” ...

随机推荐

  1. C++开源项目等收集

    VLC 是一款自由.开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD.音频 CD.VCD 及各类流媒体协议. Downloading vlc-2.2.4.tar.xz Thanks ...

  2. Aspose.Cells设置单元格格式

    使用Aspose.Cells操作Excel时,填写的参数是这样的,显然要不得! 这需要像Excel中的“转换为数字”操作,强大的Aspose.Cells可轻松解决这个问题. //默认写法 worksh ...

  3. fiddler展示serverIP方法

    转载自:http://www.xuanfengge.com/fiddler-displays-the-set-ip-method.html 前言 由于web前端在多个环境中开发,需要经常更换host, ...

  4. phpBB3.2 自动检测浏览器语言

    这是根据HTTP request header里的Accept-Language信息来处理的. 首先看一下Accept-Language的格式 Accept-Language: <languag ...

  5. 【转】CLR和JIT的理解、.NET反汇编学习

    CLR:通用语言运行时(Common Language Runtime)的简称,CLR是.NET框架的核心内容之一,可以把它看为一套标准资源,可以呗任何.NET程序使用.它包括:面向对象的编程模型.安 ...

  6. dos 批量重命名 bat

    @echo off setlocal enabledelayedexpansion echo %var% set /a i = i + var for %%x in (*) do ( if not & ...

  7. IDEA环境设置

    设置SDK:https://blog.csdn.net/y999666/article/details/51893348 打开模板使用说明,找到Maven本地安装目录, 备份E:\Program Fi ...

  8. vue 更新了vue-cli到最新版本后引发的问题: require和import、vue-loader的问题

    "vue-loader": "^12.1.0", "vue-loader": "^12.1.0", "vue- ...

  9. RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较(转)

    RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...

  10. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-8底层驱动之RTC

    视频简介:该视频介绍iCore3应用开发平台中RTC的基本配置方法以及在应用开发平台中的实时显示. 源视频包下载地址:链接:http://pan.baidu.com/s/1o80jHvc 密码:f8r ...