とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

VC++10 の<stdint.h>, <cstdint>はバグっている (1)

Microsoft Visual C++ 2010 の , ヘッダにはバグがあります。
の 33行目

typedef char int_fast8_t;

int_fast8_t がバグっています。char が符号有り(デフォルト)ならば問題はありませんが,char が符号無し(cl.exe /J)だと問題が発生します。

// int_fast8_t_bug.c
#include<stdint.h>
#include<stdio.h>
int main(){
 int_fast8_t const a = -1;
 printf("%d\n", a);
}
> cl /J int_fast8_t_bug.c
> int_fast8_t_bug
255

int_fast8_t はどんな処理系でも少なくとも -127〜127 を表現できるはずです。しかし符号有りであるべきなのに符号無しとみられ, -1 ではなく 255 と表示されてしまいました。あちゃー…。
元のソースは修正して

typedef signed char int_fast8_t;

とすべきですね。