In the below code snippet, why do we get an output of 600? Two questions will help me understand the behavior.
I was hoping to get the answer 88 which results from looping beyond the range of uint8_t
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
void main()
{
uint8_t b = 200;
printf("%" PRIu8 "\n",b+b+b);
printf("%" PRIu8 "\n",3*b);
}
gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
In my opinion it is a library bug.
In MS Visual Studio the macro PRIu8
is expanded to hhu
as it should be and you get the expected result.
It is interesting to note that if to use clang then if you will write for example
printf("%" PRIu8 "\n",( uint8_t)(b+b+b));
when again you will get the expected result.