define vs const vs enum
以前用C,习惯了define;const,enum 什么的基本不太会用,现在有时间整理一下。
/***********************************************************************************************************/
define:宏定义,在预编译阶段,编译器将宏作简单替换。比如:
#define SUNDAY 7
在预编译阶段,凡是文本中出现SUNDAY的地方,编译器就会将其用7来代替。这样的好处显而易见:增加程序的可读性。
/**************************************************************************************************************/
const:次关键字较为复杂,可以理解为对变量“加锁”,被const修饰的变量就成为只读变量。cosnt与define的主要区别在于:const是用来修饰变量的,既然是变量,编译器就需要对其进行类型检查。这样会更安全。
const 容易让人产生迷惑,不容易分清到底是对谁加锁。例如:
...............................................................................................................................................................................................
| const char *p = "hello,world!"; //const 是将*p进行了加锁,即:*p (hello,world)已经是常量,不能修改。 |
| char const *p = "hello,world!" ; //const 是将*p进行了加锁,即:*p (hello,world)已经是常量,不能修改。 |
| /*如果有:p[0] = 'a'; 则会报错:error: assignment of read-only location *p */ |
...............................................................................................................................................................................................
| const (char*) p = q; |
| char* const p = q; /* 将p进行了加锁,此时p不会被修改*/ |
| /*如果有:p = q1; 则会:error : assignment of read-only variable 'p' */ |
.............................................................................................................................................................................................
/********************************************************************************************************************/
enum:
创建枚举类型:
方法一:
typedef enum {
SUNDAY,
MONDAY,
.......
.......
.......
SATURSDAY} week;
week my_week = SUNDAY;
方法二:
enum {
SUNDAY,
MONDAY,
.......
.......
.......
SATURSDAY} week;
enum week my_week = SUNDAY;
FYI: enum相当于一下子定义了很多宏。
/*******************************************************************************************************************/