私はこれに関するすべての質問を読みましたが、まだ誰も私の混乱に対処していません.
私の理解が正しければ、ライブラリ コードのメソッドまたは変数名の先頭に二重アンダースコアを使用するのは、単なる名前空間の規則です。これにより、オペレーティング システム コードがアプリケーション コードと衝突するのを回避できます。
では、なぜ my/usr/include/string.h
には、たとえば次の関数宣言が含まれているのでしょうか。
extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
__THROW __nonnull ((1, 2));
__THROW
との部分は無視し__nonnull ((1, 2));
て、次の質問があります。
なぜ彼らはローカル変数名
__dest
と__src
に二重アンダースコアを使用するのですか?確かにこれらは実装によってのみ到達可能であり(おそらく instring.c
または類似)、私のコードと衝突することは決してありません. (余談ですが、前方宣言にパラメーター名が必要な理由がよくわかりませんでした。型だけで十分ではないでしょうか?)関数名が ではないのはなぜ
__strcpy
ですか?string.h
オペレーティング システムの一部としてカウントされませんか?const
単語と単語がrestrict
二重アンダースコアを使用するように変更されているのはなぜですか? それらは C99 (またはそれ以前の?) 標準の予約語ではありませんか?
誰かが私のためにこれを片付けることができれば、それは素晴らしいことです。