【发布时间】:2018-03-29 14:03:34
【问题描述】:
我刚刚注意到 gcc 和 clang 似乎都对 stdint.h 使用 typedefs 而对 stdbool.h 使用 #define。
#ifdef __INT8_TYPE__
#ifndef __int8_t_defined /* glibc sys/types.h also defines int8_t*/
typedef __INT8_TYPE__ int8_t;
#endif /* __int8_t_defined */
typedef __UINT8_TYPE__ uint8_t;
# define __int_least8_t int8_t
# define __uint_least8_t uint8_t
#endif /* __INT8_TYPE__ */
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#elif defined(__GNUC__) && !defined(__STRICT_ANSI__)
/* Define _Bool, bool, false, true as a GNU extension. */
#define _Bool bool
#define bool bool
#define false false
#define true true
#endif
为什么不是typedef _Bool bool;?
【问题讨论】:
-
不是同一个问题,但你可能会觉得它很有趣:stackoverflow.com/questions/1666353/…
-
布尔求值在有人决定不使用之前运行得非常好,并将
true和false粘贴在顶部。问题是,任何值不是 C 中的0是true。我从不使用布尔类型,我从不使用true或false,因为这些属性是 C 条件测试中固有的。 -
@WeatherVane 显然我遇到了一些使用
bool类型而不是整数时翻译效率更高的代码。所以我猜至少有些编译器看到了差异。 -
@WeatherVane:因为不管你认为自己有多男子气概,其他编码人员更喜欢看到
bool is_enabled而不是int is_enabled,因为前者更清楚地传达了可接受值的语义。
标签: c include c-preprocessor language-lawyer typedef