该程序:
#include <stdio.h>
#include <limits.h>
int main( void )
{
#ifdef __CHAR_UNSIGNED__
printf( "%d\n", __CHAR_UNSIGNED__ );
#endif
printf( "%d\n", CHAR_MAX );
printf( "%d\n", CHAR_MIN );
printf( "%hhd\n", CHAR_MAX );
}
Run Code Online (Sandbox Code Playgroud)
输出(在我的x86_64桌面上):
127
-128
127
Run Code Online (Sandbox Code Playgroud)
这是预期的.现在,我在Raspberry Pi(ARM)上运行了相同的操作:
1
255
0
-1
Run Code Online (Sandbox Code Playgroud)
所以... 显然我误解了一些步骤CHAR_MAX正在采取输出的方式,因为我在最后一行预期的输出 - 传递CHAR_MAX给%hhd一个char没有签名的机器- 本来就是255.
(如果你应该问,结果是相同的(char)CHAR_MAX,和(unsigned char)CHAR_MAX.)
我错过了什么?
在回归测试我自己printf()在Raspberry Pi上的实现时发生了这种情况- 顺便说一句,它会打印出来255.所以...只有一个实施正确,我有下沉的感觉,这不是我的......