enum和define的区别?解决方法
enum和define的区别?
#define 的宏会在预处理时替换, enum却不会替换,那enum定义也不占用空间, 那enum是如何工作的?
gcc -E -P enum.c
/*****************************************************************************************/
gcc -E -P enum.c
------解决方案--------------------
enum和define都是高级语言层面的东西
编译过之后,他们都是常数……
所以,不用太纠结,知道怎么用就行了
------解决方案--------------------
#define N 10
宏定义是在预处理的时候将所有的N替换为10,预处理是在编译之前。
而enum是在编译的时候,进行替换。
处理的时机不一样,但均不占用内存空间
------解决方案--------------------
宏不是个东西.只是替换.
enum 是一个实体.enum 的值也不保存在内存中.
内存不能解释的C 语言现象多了去了..
enum 是根据C 语言的要求工作的.
或者说间由C语言的机制驱动的.
#define 的宏会在预处理时替换, enum却不会替换,那enum定义也不占用空间, 那enum是如何工作的?
- C/C++ code
/* enum.c */ #if 1 #define ONE (1) #else enum Tags { ZERO, ONE, TWO }; #endif int main() { int x = ONE; return 0; }
gcc -E -P enum.c
- C/C++ code
int main() { int x = (1); return 0; }
/*****************************************************************************************/
- C/C++ code
/* enum.c */ #if 0 /* Change */ #define ONE (1) #else enum Tags { ZERO, ONE, TWO }; #endif int main() { int x = ONE; return 0; }
gcc -E -P enum.c
- C/C++ code
enum Tags { ONE, TWO, ThREE }; int main() { int x = ONE; return 0; }
------解决方案--------------------
enum和define都是高级语言层面的东西
编译过之后,他们都是常数……
所以,不用太纠结,知道怎么用就行了
------解决方案--------------------
#define N 10
宏定义是在预处理的时候将所有的N替换为10,预处理是在编译之前。
而enum是在编译的时候,进行替换。
处理的时机不一样,但均不占用内存空间
------解决方案--------------------
宏不是个东西.只是替换.
enum 是一个实体.enum 的值也不保存在内存中.
内存不能解释的C 语言现象多了去了..
enum 是根据C 语言的要求工作的.
或者说间由C语言的机制驱动的.