Программа:
#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 );
}
Вывод (на моем рабочем столе x86_64):
127
-128
127
Это как и ожидалось. Теперь я запустил то же самое на Raspberry Pi (ARM):
1
255
0
-1
Итак ... очевидно, я неправильно понял какой-то шаг CHAR_MAX
делает свой путь к выводу, как вывод, который я ожидал в этой последней строке - прохождение CHAR_MAX
до %hhd
на машине с char
без знака - было бы 255
.
(И если вы спросите, результат будет одинаковым для (char)CHAR_MAX
и (unsigned char)CHAR_MAX
.)
Чего мне не хватает?
Это случилось со мной во время регрессионного тестирования моей собственной реализации printf()
на Raspberry Pi, которая, кстати, делает print 255
. Так что ... только одна реализация делает это правильно, и у меня есть ощущение, что это не мое ...