4
// Filename: test.c
#include <sys/types.h>
int main() {
    uint a;
    return 0;
}

上記のコードは、gcc を使用してコンパイルでき、gnu89 や gnu99 などの標準で clang を使用できます。つまり、次のように動作します。

$gcc test.c # for the default is std=gnu89
$clang test.c # for the default is std=gnu99

ただし、以下は「undeclared uint」というエラーで失敗します。

$gcc -std=c99 test.c
$clang -std=c99 test.c

c99標準でuintの定義が消えた理由を説明できますか?

4

2 に答える 2

6

C標準では type を定義/要求していないためですuint。ほとんどの場合、コンパイラ、システム、またはライブラリ固有の便利な型です。使用しないでください。

于 2013-03-17T21:26:13.523 に答える
1

の内容をここに示し、 uint に関連する部分を次のように紹介します。

#ifdef __USE_MISC
/* Old compatibility names for C types.  */
typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
#endif

このSOは、この独特のマクロがどこから来たのかを示し、基本的な説明を提供します。

慎重な調査により、SVID も 1 つの標準であり、これによって裏付けられていることが明らかになりました。GNU 標準、gnu89 および gnu99 は、おそらく可能な限り多くのものをカバーしているため、uint が C99 には含まれず、gcc および clang のデフォルト標準には含まれるという結果の動作は理解できます。

于 2013-03-21T18:00:47.430 に答える