ホームページ > バックエンド開発 > C++ > 有効なコードにもかかわらず、関数呼び出しは C と C で異なる動作をする可能性がありますか?

有効なコードにもかかわらず、関数呼び出しは C と C で異なる動作をする可能性がありますか?

Susan Sarandon
リリース: 2024-11-08 14:27:02
オリジナル
723 人が閲覧しました

Can Function Calls Behave Differently in C and C   Despite Valid Code?

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: C90 では、コードは正常にコンパイルされ、宣言されていないが呼び出すことができる関数 f() を呼び出します。 「hello」が出力されます。
  • C : C では、コードはコンパイルされますが、「hello」は出力されません。代わりに、タイプ f の一時オブジェクトを作成します。 f() 呼び出しが終了するとすぐにオブジェクトが破棄されるため、「hello」は出力されません。

バージョンに関する考慮事項:

この動作違いは C90 に固有です。 C 標準の以降のバージョン (C99 など) では、宣言なしで関数を呼び出すことは無効になりました。結果として、コードは C と C の両方で同じように動作します。

以上が有効なコードにもかかわらず、関数呼び出しは C と C で異なる動作をする可能性がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート