これはコンパイルエラーの原因になりますか?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";} }
そうでない場合、どうしてですか?
これはコンパイルエラーの原因になりますか?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";} }
そうでない場合、どうしてですか?
would this cause a compilation error?
はい! <iostream.h>
と<conio.h>
は非標準ヘッダーです。 main
の返品タイプはint
である必要があります。
BTW defult :
は単なるラベル名なので実際にはエラーではありません。
Turbo CはSOの新しい古い規格です。 –
私はあなたのアフター・アイデアが実際の質問に対する答えだと思っています。 –
と仮定conio.h
とiostream.h
はcout
は、グローバル名前空間で定義されており、あなたのコンパイラは、コードがエラーなしでコンパイルされ、main
機能のための非標準の署名void main()
を受け入れ、存在します。
なぜdefult:
がエラーではないのだろうかと疑問に思うかもしれません。それは、ラベルとして解釈されるためです。私。あなたのswitchステートメントは単一のケースを持ち、そのケースの中にgoto defult
を使ってジャンプすることができる "defult"というラベルがあります。
私が、conio.h
とclrscr
への参照を除去iostream
にiostream.h
を変え、std::cout
としてcout
呼ばれ、int
にmain
の種類を変更した後ことに留意すべきである、g++ -Wall
エラーなしでコードをコンパイルしたが、警告を生成 "警告:ラベル 'defult'は定義されていますが使用されていません。したがって、コードは実際に有効なコードであり、正常にコンパイルされますが、まともなコンパイラが誤植について警告します。
+1は 'void main()'に気づいています。そのナンセンスは何ですか?これを教える本は本当にありますか? –
Cでは、コンパイラはこれを受け入れることができます。 – etarion
@etarion:コンパイラが「受け入れた」すべてが「受け入れられる」となった場合、コンピュータ業界全体が崩壊する可能性があります。 1つの本を書くために座っているとき、私は彼らがランダムなコンパイラでいくつかのコードを一緒にハックしただけでなく、その言語の仕様を少なくとも読んでくれることを願っています。 –
"defult"は、goto文で気付かれるようなマーカーと見なされるので、これはコンパイラエラーのある状況ではありません。コンパイラではなく、あなたのせいです。
'default'のスペルミスがコンパイル時にエラーを起こすことを意味しますか?そして、それは私が今まで見た中で最も奇妙なブレーススタイルです... –
コンパイルして、私は言うでしょう。なぜあなたは私達に尋ねる必要があるのか説明できますか? –
@ jdv-Jan:明らかに、彼は携帯電話やコンパイラが利用できない場所にいるのは明らかです。これは、人々がこのような質問をしたときに想定するものです。 –