当CHAR_BIT> 8时,语言标准如何定义uint8_t?

bar*_*nos 3 c

我手边没有任何平台CHAR_BIT > 8.

所以我在文件中更改了相关的预处理器定义limits.h:

#define CHAR_BIT      16          /* number of bits in a char */
#define SCHAR_MIN   (-32768)      /* minimum signed char value */
#define SCHAR_MAX     32767       /* maximum signed char value */
#define UCHAR_MAX     0xffff      /* maximum unsigned char value */
Run Code Online (Sandbox Code Playgroud)

然后,当包含文件时stdint.h,我希望看到它uint8_t不再是一个可行的类型.

但确实如此.

语言标准如何解决这个问题?

eca*_*mur 7

该文件limits.h不是编译器的配置文件; 它是一种机制,通过该机制,实施为您提供信息.你的编译器知道char有8位,那uint8_t就是unsigned char; 它不需要读取limits.h文件来找出它.

如果你想要一个汽车类比,通过你的燃油表锤击钉子不会阻止你运行坦克干.

  • 或者在速度表上的"50"上重写"100"将不会让你到目的地的速度提高两倍. (3认同)
  • @barakmanos它取决于编译器,但是,对于组织良好的编译器,它将在其自己的源代码中的某处定义每种C类型的大小,如果编译器支持多个目标,则可能用于多个目标,以及然后将这些编译到编译器中.例如,Clang有https://github.com/llvm-mirror/clang/blob/master/lib/Basic/Targets.cpp (2认同)