论define,const,enum三者的区别

来源:互联网 发布:海康威视怎么样 知乎 编辑:程序博客网 时间:2024/05/21 17:57

      1.#define宏定义 的本质是宏替换,它定义的数据没有类型。如#define MAX 10,意味着从本行宏定义开始,在后面的代码中编译器会在预处理阶段将所遇到的MAX都用10替换,这样就做到了一改全改,省时省力。然而需要注意接下来的几种情况:

  •         #define ERROR_POWEROFF -1

                如果我们在代码里不用ERROR_POWEROFF 这个宏而用-1,尤其在函数返回错误代码的时候(往往开发一个系统需要定义很多错误代                         码),所以我们见到这个-1时一定很懵逼,这个-1,我们一般称为“魔鬼数”,论谁遇到它也会发狂的。所以代码里一定不要出现“魔鬼数”。

  •       不要一时手误给#define MAX 10后面加分号。则编译器会认为MAX应该用10;代替,岂不是尴尬了。

  •      宏定义不开辟内存空间,不进行类型检查 

  •      define不是C语言里的关键字。

           2. const修饰的是常变量,也就是说它所修饰的是一个变量,只是这个变量只可读不可改,具有常性,比如const int max=10,在后面我们不能修         改max 的值。这里 有几点需要说明:

  •      const在编译时进行替换,宏定义在预处理阶段进行替换
  •      const 修饰的只读变量必须在定义的同时初始化
  •      编译器会给const 修饰的只读变量做类型校验,而宏定义不会
      3.enum
             1)枚举常量是在编译的时候确定其值
             2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量
             3)枚举可以一次定义大量相关的常量,而#define 宏一次只能定义一个
                  

原创粉丝点击