C/C++ typedef 与 define的作用域
c++
#define
作用域有点类似于C/C++全局静态变量
编译器处理宏的时机是预处理阶段 编译器按文本顺序处理 遇到宏时就定义一个宏变量
假设这种情况
1 |
|
输出:
1
main函数也是看得到MACRO宏的 因为文本顺序上test在前。编译器处理到test时定义了一个宏变量 使得main也能“看见“这个宏。
假如把顺序交换
1 |
|
没有输出。
main就看不见MACRO宏了
不同源文件中的宏
不同源文件是看不到互相定义的宏的 除非将宏定义在了头文件中
宏的机制类似于全局变量 一般情况不会暴露给另一个源文件 除非你特意在头文件中暴露了它
1 |
|
如果想在b.c中使用CX,需要将#define CX 1
定义在a.h中,并在b.c(或b.h)中包含a.h。
#define宏定义有一个特别的长处:可以使用 #ifdef ,#ifndef等来进行逻辑判断,还可以使用#undef来取消定义。
typedef
typedef符合范围规则,使用typedef定义的变量类型其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性。
1 |
|
报错:error: unknown type name ‘CHAR’
原文地址:https://blog.csdn.net/qq_21358401/article/details/80435855