这会导致编译错误吗?
#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.h和iostream.h存在,cout在全局命名空间中定义,并且您的编译器接受void main()该main函数的非标准签名,您的代码将编译而没有错误.
您可能想知道为什么defult:不是错误:这是因为它被解释为标签.即你的switch语句有一个案例,在这种情况下有一个名为"defult"的标签,你可以跳转到使用goto defult.
应当指出的是,之后我删除了引用conio.h,并clrscr,改iostream.h到iostream,简称cout为std::cout和改变的类型main来int,g++ -Wall编译没有错误的代码,但产生的警告"警告:标签'defult’定义,但不使用".因此,虽然代码确实是有效的代码并且编译得很好,但是一个不错的编译器会警告你这个错字.