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]
コメントを追加