enum跟define的区别

enum和define的区别?
#define 的宏会在预处理时替换, enum却不会替换,那enum定义也不占用空间, 那enum是如何工作的?


/* 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


int main()
{
 int x = (1);
 return 0;
}

/*****************************************************************************************/

/* 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


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语言的机制驱动的.