セミコロンのないプログラムは、C ++ではなくCで正常にコンパイルされるのはなぜですか。

デストラクタ

Orwell Dev C ++ IDEを使用しています。最近、セミコロン(;を付けるのを忘れた単純なプログラムに従ってテストしましたが、それでもCでは正常にコンパイルされますがC ++ではコンパイルされません。どうして?理由は何ですか?

// C program compiles & runs fine, even ; missing at end of struct
#include <stdio.h>
struct test
{ int a,b};     // missing semicolon
int main()
{
    struct test d={3,6};
    printf("%d",d.a);
    return 0;
}

[警告]構造体または共用体の末尾にセミコロンがありません[デフォルトで有効]

// Following is compilation error in C++
#include <stdio.h>
struct test
{ int a,b};     // missing semicolon
int main()
{
    struct test d={3,6};
    printf("%d",d.a);
    return 0;
}

[エラー]予期される ';' メンバー宣言の終わりに

コードブロック13.12IDEでも同じCプログラムを試しましたが、次のエラーメッセージが表示されます

エラー:構造体または共用体の末尾にセミコロンがありません。

異なる実装によって異なるエラーメッセージが表示されるのはなぜですか?

マイクシーモア

セミコロンは両方の言語で必要です。具体的には、Cは1つ以上の構造体メンバーの宣言を次のように指定します。

struct-declaration:
    specifier-qualifier-list struct-declarator-list ;

C ++は、1つ以上のクラスメンバー変数の宣言を次のように指定します。

member-declaration:
    attribute-specifier-seq<opt> decl-specifier-seq<opt> member-declarator-list<opt> ;

どちらも最後にセミコロンが必要です。

C ++コンパイラがCコンパイラよりも厳密である理由をコンパイラの作成者に尋ねる必要があります。言語仕様では、プログラムの形式が正しくない場合にのみ「診断」が必要になるため、警告を発行してセミコロンが存在するかのようにコンパイルを続行するか、エラーを発行して停止することが正当であることに注意してください。

IDEがコンパイラとしてGCCを使用しているようです。この場合-Werror、より厳密な診断が必要な場合は、警告をエラーに変換するために使用できます

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

このプログラムがC11では正常にコンパイルされるのにC99ではコンパイルされないのはなぜですか?

分類Dev

このObjective-C ++プログラムがコンパイルされないのはなぜですか?

分類Dev

このC ++プログラムがMacOSでコンパイルされ、Ubuntuではコンパイルされないのはなぜですか?

分類Dev

このc ++プログラムがコンパイルされるのはなぜですか?

分類Dev

「charの配列の初期化文字列が長すぎる」がC ++ではなくCで正常にコンパイルされるのはなぜですか?

分類Dev

GCCでコンパイルされたCプログラムに.eh_frameセクションが必要なのはなぜですか?

分類Dev

<string.h>を含めないと、プログラムが正常にコンパイルされるのはなぜですか?

分類Dev

単純な「Hello World」スタイルのプログラムがTurbo C ++でコンパイルされないのはなぜですか?

分類Dev

この同等のプログラムがコンパイルされないのはなぜですか?

分類Dev

このJava 8プログラムがコンパイルされないのはなぜですか?

分類Dev

プログラムが常にa.outにコンパイルされるのはなぜですか?なぜp.outまたはc.outまたはg.progではないのですか?

分類Dev

このC ++プログラムが一部のコンパイラで機能するのに、他のコンパイラでは機能しないのはなぜですか?C ++コンパイラの主な違いは何ですか?

分類Dev

C ++でfetestexceptがインライン化されるのではなく、関数呼び出しにコンパイルされるのはなぜですか

分類Dev

実装ファイルの@endの後にセミコロンを追加した後もプログラムが実行されるのはなぜですか?

分類Dev

次のコードが `c ++ 03`でコンパイルされるのに、` c ++ 11`ではコンパイルされないのはなぜですか

分類Dev

コマンドプロンプトでCプログラムをコンパイルしているときに* .o(オブジェクト)ファイルが作成されないのはなぜですか?

分類Dev

次のプログラムがコンパイルされるのはなぜですか?

分類Dev

必要なヘッダーファイルがコメントアウトされているにもかかわらず、このC ++プログラムがコンパイルされて実行されるのはなぜですか?

分類Dev

このCコードがCodeblocksでコンパイルされるのに、Visual Studioではコンパイルされないのはなぜですか?

分類Dev

このC ++プログラムがコンパイルに失敗したのはなぜですか?

分類Dev

プログラムがコンパイルされるのはなぜですか?

分類Dev

なぜ `int;`はCではうまくコンパイルされますが、C ++ではコンパイルされないのですか?

分類Dev

このコードがJava 11で正常にコンパイルされるのはなぜですか?

分類Dev

このプログラムが3つのC ++コンパイラによって誤って拒否されるのはなぜですか?

分類Dev

JVMがプログラム全体をコンパイルするのではなく、プログラム全体を事前にコンパイルしないのはなぜですか?

分類Dev

このコードがMSVC ++ではなくg ++でコンパイルされるのはなぜですか?

分類Dev

ストリーム出力で<<ではなく<がコンパイルされるのはなぜですか?

分類Dev

コマの代わりにセミコロンがforループで使用されるのはなぜですか?

分類Dev

Brainfuckによってアセンブリコンパイラに作成されたプログラムがクラッシュするのはなぜですか?

Related 関連記事

  1. 1

    このプログラムがC11では正常にコンパイルされるのにC99ではコンパイルされないのはなぜですか?

  2. 2

    このObjective-C ++プログラムがコンパイルされないのはなぜですか?

  3. 3

    このC ++プログラムがMacOSでコンパイルされ、Ubuntuではコンパイルされないのはなぜですか?

  4. 4

    このc ++プログラムがコンパイルされるのはなぜですか?

  5. 5

    「charの配列の初期化文字列が長すぎる」がC ++ではなくCで正常にコンパイルされるのはなぜですか?

  6. 6

    GCCでコンパイルされたCプログラムに.eh_frameセクションが必要なのはなぜですか?

  7. 7

    <string.h>を含めないと、プログラムが正常にコンパイルされるのはなぜですか?

  8. 8

    単純な「Hello World」スタイルのプログラムがTurbo C ++でコンパイルされないのはなぜですか?

  9. 9

    この同等のプログラムがコンパイルされないのはなぜですか?

  10. 10

    このJava 8プログラムがコンパイルされないのはなぜですか?

  11. 11

    プログラムが常にa.outにコンパイルされるのはなぜですか?なぜp.outまたはc.outまたはg.progではないのですか?

  12. 12

    このC ++プログラムが一部のコンパイラで機能するのに、他のコンパイラでは機能しないのはなぜですか?C ++コンパイラの主な違いは何ですか?

  13. 13

    C ++でfetestexceptがインライン化されるのではなく、関数呼び出しにコンパイルされるのはなぜですか

  14. 14

    実装ファイルの@endの後にセミコロンを追加した後もプログラムが実行されるのはなぜですか?

  15. 15

    次のコードが `c ++ 03`でコンパイルされるのに、` c ++ 11`ではコンパイルされないのはなぜですか

  16. 16

    コマンドプロンプトでCプログラムをコンパイルしているときに* .o(オブジェクト)ファイルが作成されないのはなぜですか?

  17. 17

    次のプログラムがコンパイルされるのはなぜですか?

  18. 18

    必要なヘッダーファイルがコメントアウトされているにもかかわらず、このC ++プログラムがコンパイルされて実行されるのはなぜですか?

  19. 19

    このCコードがCodeblocksでコンパイルされるのに、Visual Studioではコンパイルされないのはなぜですか?

  20. 20

    このC ++プログラムがコンパイルに失敗したのはなぜですか?

  21. 21

    プログラムがコンパイルされるのはなぜですか?

  22. 22

    なぜ `int;`はCではうまくコンパイルされますが、C ++ではコンパイルされないのですか?

  23. 23

    このコードがJava 11で正常にコンパイルされるのはなぜですか?

  24. 24

    このプログラムが3つのC ++コンパイラによって誤って拒否されるのはなぜですか?

  25. 25

    JVMがプログラム全体をコンパイルするのではなく、プログラム全体を事前にコンパイルしないのはなぜですか?

  26. 26

    このコードがMSVC ++ではなくg ++でコンパイルされるのはなぜですか?

  27. 27

    ストリーム出力で<<ではなく<がコンパイルされるのはなぜですか?

  28. 28

    コマの代わりにセミコロンがforループで使用されるのはなぜですか?

  29. 29

    Brainfuckによってアセンブリコンパイラに作成されたプログラムがクラッシュするのはなぜですか?

ホットタグ

アーカイブ