C と C の両方で有効なコードは、各言語でコンパイルすると異なる動作をしますか?
C と C には多くの類似点がありますが、特定のコードがありますこれらの言語でコンパイルすると、コードが構文的に有効であっても、コンストラクトが異なる結果を生成する可能性があります。
関数呼び出しとオブジェクト宣言
そのようなシナリオの 1 つは関数呼び出しです。 C90 では、事前の宣言なしで関数を呼び出すことができます。ただし、C では、 f() が宣言なしで呼び出されると、 f 型のオブジェクトが作成されます。
コード例:
次のコードを考えてみましょう:
#include <stdio.h> struct f { int x; }; int main() { f(); } int f() { return printf("hello"); }
動作相違点:
バージョンに関する考慮事項:
この動作違いは C90 に固有です。 C 標準の以降のバージョン (C99 など) では、宣言なしで関数を呼び出すことは無効になりました。結果として、コードは C と C の両方で同じように動作します。
以上が有効なコードにもかかわらず、関数呼び出しは C と C で異なる動作をする可能性がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。