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

gar*_*ima 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";}   }
Run Code Online (Sandbox Code Playgroud)

如果没有,为什么不呢?

sep*_*p2k 10

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

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

应当指出的是,之后我删除了引用conio.h,并clrscr,改iostream.hiostream,简称coutstd::cout和改变的类型mainint,g++ -Wall编译没有错误的代码,但产生的警告"警告:标签'defult’定义,但不使用".因此,虽然代码确实是有效的代码并且编译得很好,但是一个不错的编译器会警告你这个错字.

  • +1注意到`void main()`.什么是胡说八道?真的有书可以教这个吗? (4认同)
  • @Cody Gray:我没有说"编译器接受这个",我说"C允许编译器接受这个".C与ANSI C中的语言规范一样.它(标准)特别说"或者以其他一些实现定义的方式". (2认同)