enum和define的区别?解决方法

enum和define的区别?
#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语言的机制驱动的.