2

API の _open、_close、およびその他の標準ファイル i/o 関数の先頭にアンダースコアが付いているのはなぜですか? これらは標準の一部ではありませんか?

4

1 に答える 1

2

開閉は一部の Unix 標準、POSIX、SUS などの一部ですが、Windows は Unix ではありません。fopen などの ANSI C 標準ライブラリ関数には、単一のアンダースコア装飾がないことに注意してください。

Windows は Unix ではないため、ずっと前に Unix スタイルの API が利用できなかった時代があったかもしれません。このため、open や close などの関数を定義するクライアント コードを記述できた可能性があります。既存のコードとの互換性を維持するために、Unix スタイルの API が追加された場合、アンダースコアが先行する識別子は実装用に予約されているため、アンダースコアを先頭に追加することができます。つまり、既存のコードで _open という名前の関数を定義してはなりません。

Unix スタイルの API を対象とする「移植可能な」コードは、マクロ (またはリンカー レベルで実装されたエイリアス) を使用して比較的簡単にコンパイルできます。これは、UNIX を対象とするそのコードが open/close などの名前の関数を定義していないことを認識しているためです。

于 2009-10-14T02:38:13.283 に答える