「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C と C++ が関数シグネチャの配列の長さを無視するのはなぜですか?

C と C++ が関数シグネチャの配列の長さを無視するのはなぜですか?

2024 年 12 月 26 日に公開
ブラウズ:766

Why Do C and C   Ignore Array Lengths in Function Signatures?

C および C の関数に配列を渡す

質問:

なぜ C と C では、 C コンパイラでは、int dis(char a[1]) などの関数シグネチャでの配列長宣言が許可されていない場合でも許可されます。 enforced?

答え:

C および C で配列を関数に渡すために使用される構文は、最初の要素へのポインターを渡すことを可能にする歴史的に奇妙なものです。

詳細な説明:

In C および C では、配列は参照によって関数に渡されません。代わりに、配列の最初の要素へのポインターが渡されます。これは、関数シグネチャ内の [] 表記が実際にはコンパイラによって無視されることを意味します。

影響:

この動作は、あたかも次のように見えるため、混乱を招く可能性があります。配列は参照によって渡されますが、実際にはポインタのみが渡されます。さらに、関数シグネチャから配列の長さを決定することはできないため、可変長配列の操作が困難になる可能性があります。

歴史的観点:

この構文を許可する決定は、配列を関数に渡す便利な方法を提供する方法として 1970 年代に行われました。しかし、それ以来、混乱と潜在的なセキュリティ脆弱性を引き起こしています。最新のプログラミングでは、この構文の使用を避け、代わりにポインターを使用して配列を参照によって渡すことをお勧めします。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3