2011-01-26 8 views
0

これはコンパイルエラーの原因になりますか?Cでコンパイルエラーと見なされない

#include<iostream.h> 
#include<conio.h> 
void main() 
{clrscr(); 
int x=2; 
switch (x) 
    {case 1: cout<<"i am 1"; 
defult: cout<<"i made a typo";} } 

そうでない場合、どうしてですか?

+5

'default'のスペルミスがコンパイル時にエラーを起こすことを意味しますか?そして、それは私が今まで見た中で最も奇妙なブレーススタイルです... –

+1

コンパイルして、私は言うでしょう。なぜあなたは私達に尋ねる必要があるのか​​説明できますか? –

+2

@ jdv-Jan:明らかに、彼は携帯電話やコンパイラが利用できない場所にいるのは明らかです。これは、人々がこのような質問をしたときに想定するものです。 –

答えて

3

would this cause a compilation error?

はい! <iostream.h><conio.h>は非標準ヘッダーです。 mainの返品タイプはintである必要があります。

BTW defult :は単なるラベル名なので実際にはエラーではありません。

+2

Turbo CはSOの新しい古い規格です。 –

+3

私はあなたのアフター・アイデアが実際の質問に対する答えだと思っています。 –

10

と仮定conio.hiostream.hcoutは、グローバル名前空間で定義されており、あなたのコンパイラは、コードがエラーなしでコンパイルされ、main機能のための非標準の署名void main()を受け入れ、存在します。

なぜdefult:がエラーではないのだろうかと疑問に思うかもしれません。それは、ラベルとして解釈されるためです。私。あなたのswitchステートメントは単一のケースを持ち、そのケースの中にgoto defultを使ってジャンプすることができる "defult"というラベルがあります。

私が、conio.hclrscrへの参照を除去iostreamiostream.hを変え、std::coutとしてcout呼ばれ、intmainの種類を変更した後ことに留意すべきである、g++ -Wallエラーなしでコードをコンパイルしたが、警告を生成 "警告:ラベル 'defult'は定義されていますが使用されていません。したがって、コードは実際に有効なコードであり、正常にコンパイルされますが、まともなコンパイラが誤植について警告します。

+4

+1は 'void main()'に気づいています。そのナンセンスは何ですか?これを教える本は本当にありますか? –

+1

Cでは、コンパイラはこれを受け入れることができます。 – etarion

+0

@etarion:コンパイラが「受け入れた」すべてが「受け入れられる」となった場合、コンピュータ業界全体が崩壊する可能性があります。 1つの本を書くために座っているとき、私は彼らがランダムなコンパイラでいくつかのコードを一緒にハックしただけでなく、その言語の仕様を少なくとも読んでくれることを願っています。 –

1

"defult"は、goto文で気付かれるようなマーカーと見なされるので、これはコンパイラエラーのある状況ではありません。コンパイラではなく、あなたのせいです。

関連する問題