C と C の両方で有効なコードは、コンパイル時に異なる出力を生成できますか?

Susan Sarandon
リリース: 2024-11-09 01:37:02
オリジナル
729 人が閲覧しました

Can Valid Code in Both C and C   Produce Different Output When Compiled?

C と C の両方で有効なコードは、コンパイル時に異なる動作を示しますか?

多くの類似点にもかかわらず、 C と C の間には微妙な違いがあります。ここで疑問が生じます: 両方の言語で有効なコードは、それぞれの標準コンパイラーでコンパイルされた場合でも異なる結果を生成できますか?

公正な比較のための前提条件

意味のある比較を保証するため比較するには、特定の条件を確立してみましょう:

  • プリプロセッサ ディレクティブ (#ifdef など) は除外されます。
  • 実装定義の側面は両方の言語で同一です。
  • モダン標準のバージョンが比較されます (C90 以降と C 98 など)。

動作の相違

次のコード スニペットを考えてみましょう:

#include <stdio.h>

struct f { int x; };

int main() {
    f();
}

int f() {
    return printf("hello");
}
ログイン後にコピー

C では、一時的な f オブジェクトが作成されて破棄されるため、このコードは出力されません。ただし、C90 では、事前の宣言なしで関数を呼び出すことができるため、「hello」が出力されます。

この差異は、 C と C の f() の異なる解釈から生じます。 C では、 f() は関数呼び出しとして扱われますが、 C では、構造体の宣言とみなされます。

以上がC と C の両方で有効なコードは、コンパイル時に異なる出力を生成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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