我是C/C++的新程序员,已经用Java编程了很长一段时间.我目前正在理解一些C代码.在这里,我看到一些宏定义,如:
/* Flags for ds_flags */
#define DSF_OVER (1<<0)
#define DSF_DISPLAY (1<<1)
#define DSF_CALLFLOW (1<<2)
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么我们必须以这种方式定义这些宏.在这些方面获得的优势是什么,而不是在定义如下:
#define DSF_OVER 0
#define DSF_DISPLAY 1
#define DSF_CALLFLOW 2
Run Code Online (Sandbox Code Playgroud)
看到类似的东西
#define DSF_FOO 0x800
#define DSF_BAR 2048
Run Code Online (Sandbox Code Playgroud)
没有多少人能够快速看到只有一个位被设置,它是什么.
#define DSF_FOO (1<<11)
Run Code Online (Sandbox Code Playgroud)
但是这个很清楚.
唯一的潜在优势是,更容易看到代码正确定义了每个常量,并设置了一个不同的位.
大多数人会看到,一目了然无论如何,如果你只写1,2,4代替1<<0,1<<1,1<<2,所以也许很难看到在这个例子的优势.一旦你到达1<<15,有些人会错过像32748这样的拼写错误.