错别字在C ++中不被视为编译错误

时间:2011-01-26 12:38:18

标签: 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";}   }

如果没有,为什么不呢?

3 个答案:

答案 0 :(得分:10)

假设存在conio.hiostream.h,则在全局命名空间中定义cout,并且您的编译器接受void main()函数的非标准签名main ,您的代码将编译没有错误。

您可能想知道为什么defult:不是错误:这是因为它被解释为标签。即你的switch语句有一个case,在这种情况下有一个名为“defult”的标签,你可以使用goto defult跳转到它。

应该注意的是,在删除对conio.hclrscr的引用后,将iostream.h更改为iostream,将cout称为{{1}并将std::cout的类型更改为mainint编译代码时没有错误,但产生了警告“warning:label'defult'已定义但未使用”。因此,虽然代码确实是有效的代码并且编译得很好,但是一个不错的编译器会警告你这个错字。

答案 1 :(得分:3)

  

会导致编译错误吗?

是的! <iostream.h><conio.h>是非标准标头。 main的返回类型应为int

BTW defult :实际上并不是一个错误,因为它只是一个标签名称。

答案 2 :(得分:1)

这里的“默认”被认为是一个标记,例如在goto语句中会注意到的,因此这不是编译器错误的情况。这是你的错,而不是编译器。