今日の初めに、私が作成しているものと比較するためだけにさまざまなヘッダー ファイルを調べていたところ、関数の宣言が少し異なっているように見えることに気付きました。
たとえば、strlen
fromの宣言は次のstring.h
とおりです。
extern size_t __cdecl strlen(const char *);
いくつかの調査を行ったところextern
、関数ブロックの外側で変数を宣言するためのものであることがわかりました。ヘッダー ファイルでも関数を宣言するのがベスト プラクティスextern
ですか?
size_t
の代わりにwhich is unsigned long long
hereを使用しているように見えますint
が、これはいくつかの理由 (たとえば、文字列の長さが負の数になることは決してない) により効率的であるためだと推測していますが、それが彼らがsize_t
ここで使用する理由ですか? それとも私はポイントを完全に逃していますか?
そして最後に__cdecl
、あまり情報が見つからないものを見つけます。__cdecl
正確には何ですか?私もそれを使うべきですか?
最後に、この宣言には、 に渡される引数の変数名がないことに気付きましたstrlen
。この理由は、これが関数のプロトタイプではなく単なる宣言であり、プロトタイプが別の場所にあるためだと推測しています。strlen(const char *str)
宣言などに変数名がないのはなぜですか?
最後の質問は、これが単なる宣言である場合、strlen の関数プロトタイプはどのようになるでしょうか? 私の推測は次のようなものです:
size_t strlen(const char *str)
コードを学習して改善したいので、質問しているだけです(Cファイルで関数プロトタイプ/宣言を作成し、ヘッダーファイルで関数宣言を作成して、他のCファイルがそれらを利用できると仮定します)。