@調査結果
NetBSDが移植性の為にu_int32_tを導入したのが1994年。
<machine/types.h> rev1.3
んでhtonl(3)の引数がunsigned longに変わってu_int32_tに変更されたのが1996年。
<machine/endian.h> rev1.17*1
その後、htonl(3)はSUSv2(Single UNIX Specification version 2)に
取り込まれる。
この時インタフェースが<sys/types.h> u_int32_tではなく、<inttypes.h> uint32_t に変更されている
*2、1997年頃なのかなぁ。
ちなみにPOSIX(IEEE Std 1003.1-2004)/C99(ISO/IEC 9899:1999)ではuint32_tは
<stdint.h>に移されて<inttypes.h>は<stdint.h>をincludeすると改められる、変更の
前と
後。
NetBSDがPOSIX/C99対応の為に<inttypes.h>および<stdint.h>そしてuint32_tを導入したのが 2001年。
<sys/types.h> rev1.49
そして同時期にntohl(3)のSUSv2でのインタフェース変更をNetBSDに取り込んでいる。
<sys/endian.h> rev1.4
これはPOSIX互換(_POSIX_SOURCE)の場合のみで、それ以外はu_int32_tがこれまで通り使われている。
しかしこれは後に完全にuint32_tに置き換えられる、2005年の出来事。
<sys/endian.h> rev1.19
つまりPOSIX互換やC99互換(__STDC__ && __STDC_VERSION__ >= 199904L)のどちらでもない
ソースの場合でも、<sys/types.h>をインクルードすればuint32_tを使って構わないつーこと。
これを私は「u_int32_tからuint32_tへの置換を推奨する」と読んだんだけどどうだろう。
NetBSDの場合
typedef uint32_t u_int32_t;
となっててu_int32_tはuint32_tの別名扱いだし、そもそもu_int32_tおよびuint32_tに対応するsigned型は
どちらもint32_tになってしまうので別物として扱うと話がややこしくなりそうだし。
一方FreeBSDでは
/*
* XXX POSIX sized integrals that should appear only in <sys/stdint.h>.
*/
...
#ifndef _UINT32_T_DECLARED
typedef __uint32_t uint32_t;
#define _UINT32_T_DECLARED
#endif
...
typedef __uint32_t u_int32_t;
と、u_int32_tとuint32_tは別定義になってるし(まあ実体はどちらも<machine/_types.h> __uint32_tだけどさ)
ご丁寧にuint32_tには「XXX」なコメントまでつけてある。
なのでuint32_tとu_int32_tはちゃんと使い分けろといってるように見えるんだよね。