0

ユニオンepoll_data_tは次のようになります。

typedef union epoll_data {  
    void *ptr;  
    int fd;  
    __uint32_t u32;  
    __uint64_t u64;  
} epoll_data_t;

これはより一般的な C の質問ですが、アンダースコアなしの uint{32,64} ではなく、先頭の二重アンダースコア __uint{32,64} 型が使用されるのはなぜですか? アンダースコアバージョンを使用する理由/時期はよくわかりませんが、アンダースコアなしの uint32 は、外の世界に対して公に変更可能なユニオンで使用するのに適していると思いました。

4

3 に答える 3

2

固定幅整数型は C99 で標準化されました。その前に、コンパイラとライブラリの作成者が独自の型を導入しましたが、これらはその名残かもしれません。afaik MS にはまだ Visul Studio が同梱されていませんstdint.h

于 2010-01-03T21:15:33.760 に答える
1

ウィキペディアから直接 [ http://en.wikipedia.org/wiki/Underscore ]

さまざまな高レベル コンパイラによって生成されたコード、これらの各コンパイラに必要なランタイム ライブラリ、コンパイラによって生成されたヘルパー関数、およびプログラムの起動コードが混在する可能性がある外部識別子リンケージ スペース内で、多くの衝突が発生する可能性がありました。言語。この衝突ドメイン内で、アンダースコア文字は、外部リンケージ スペースを区別するための主要なメカニズムとしてすぐに確立されました。実行時言語サポートからの貢献との衝突を避けるために、C コンパイラがすべての外部スコープ プログラム識別子の前にアンダースコアを先頭に追加するのが一般的でした。さらに、C/C++ コンパイラが変換プロセスの一部として外部リンケージに名前を導入する必要がある場合、

于 2010-01-03T21:05:20.253 に答える