ISO/IEC 9899:TC3 6.9.1 を読んだとき -> 例 13
そしてメモ:
extern int max(int a, int b)
{
return a > b ? a : b;
}
[...]
extern int max(a, b)
int a, b;
{
return a > b ? a : b;
}
ここで int a, b; パラメータの宣言リストです。これら 2 つの定義の違いは、最初の形式は関数への後続の呼び出しの引数の変換を強制するプロトタイプ宣言として機能するのに対し、2 番目の形式はそうしないことです。
そこで、そのようにコンパイルするための独自のテスト コードを作成しました。(私は、両方の方法を前に宣言する必要があるか、とにかく言及された型定義でプロトタイプを作成する必要があると考えました)
size_t foo (size_t a, size_t b);
int main(int argc, char** argv)
{
/*some call to foo*/
return 0;
}
だから私は今尋ねています:この方法の間にパフォーマンス関連の違いはありますか:
size_t foo (a, b)
size_t a, b;
{
return a > b ? a : b;
}
そしてこれは?
size_t foo (size_t a, size_t b)
{
return a > b ? a : b;
}
私が理解しているように、最初の方法では関数呼び出しで複数の変換が回避されるため、違いがあります。これは、型が型になることが保証されているため、パラメーター型への変換が必要ないためです (この場合) size_t
.
しかし、プロトタイプは両方の場合で似ている必要があり、プロトタイプはコンパイラが処理を行うソースであると考えたので、混乱しました。
だから:違いは正確には何ですか?また、ある場合、なぜ最初の方法はめったに (決して) 見られないのでしょうか?