我发现C99标准有一个语句,它拒绝类型char和signed char/unsigned char类型之间的兼容性.
C99标准注35:
在limits.h中定义的CHAR_MIN将具有值0或SCHAR_MIN之一,这可用于区分这两个选项.无论做出何种选择,char都是与其他两种类型不同的类型,并且与两者都不兼容.
我的问题是为什么委员会否认兼容性?理由是什么?如果char与signed char或unsigned char兼容,会发生什么可怕的事情吗?
我找到了一些预处理指令,其中宏名称和替换列表是相同的.例如,gcc提供的stdbool.h中的一些预处理指令.
#else /* __cplusplus */
/* Supporting <stdbool.h> in C++ is a GCC extension. */
#define _Bool bool
#define bool bool
#define false false
#define true true
#endif /* __cplusplus */
Run Code Online (Sandbox Code Playgroud)
我不明白为什么程序员编写这些预处理指令.它们没用,替换会浪费时间.我知道这不会导致无限递归.如何避免无限递归?C标准中的相关规定是什么?