一般来说,最好是按(char *) UserIPaddr="192.168.0.5"
或(int) MAX_BUF=1024
定义一些特定参数(例如#define
,constant char */ int
)?
我读了一些帖子说最好不要在可能时使用#define
。但是,我从源代码中看到#define
对开源代码one example的常见用法:
#define IEEE80211_WLAN_HDR_LEN 24
a_uint8_t *iv = NULL;
a_uint16_t tmp;
a_uint16_t offset = IEEE80211_WLAN_HDR_LEN;
#define
可以避免在那里使用,但我想知道为什么在这种情况下使用#define是优选的。我该如何决定何时使用#define
?
答案 0 :(得分:7)
在C const声明中不生成常量表达式,因此如果需要使用const
不可能使用常量表达式,那么传统且更常用的方法是使用# define
。
例如const int
不能用于:
答案 1 :(得分:3)
使用#define
的原因很少。很少有人能够完成static const
或enum
不能。
正如Alok Save提到的那样,static const int
不能在C中产生一个整数常量表达式(我不是仔细检查C标准;但是在C ++中却不是这样)。但enum
可以做到这一点。但是,纯C中的enum
不会增长以适应大于INT_MAX
的值。因此,如果您需要long
值作为数组绑定或案例标签,#define
是您的朋友。或者考虑切换到使用C ++的C子集,它没有这样的限制。
答案 2 :(得分:2)
我的经验法则是不使用#define
,除非符号必须是编译时常量。考虑到这一点,我个人不会在您的示例中使用#define
。
#define CRYPTO_KEY_TYPE_AES 2
...
switch (keytype) {
case CRYPTO_KEY_TYPE_AES:
这里,CRYPTO_KEY_TYPE_AES
必须是一个常量表达式,因此使用常量变量是不行的。