这会导致编译错误吗?
#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";} }
如果没有,为什么不呢?
答案 0 :(得分:10)
假设存在conio.h
和iostream.h
,则在全局命名空间中定义cout
,并且您的编译器接受void main()
函数的非标准签名main
,您的代码将编译没有错误。
您可能想知道为什么defult:
不是错误:这是因为它被解释为标签。即你的switch语句有一个case,在这种情况下有一个名为“defult”的标签,你可以使用goto defult
跳转到它。
应该注意的是,在删除对conio.h
和clrscr
的引用后,将iostream.h
更改为iostream
,将cout
称为{{1}并将std::cout
的类型更改为main
,int
编译代码时没有错误,但产生了警告“warning:label'defult'已定义但未使用”。因此,虽然代码确实是有效的代码并且编译得很好,但是一个不错的编译器会警告你这个错字。
答案 1 :(得分:3)
会导致编译错误吗?
是的! <iostream.h>
和<conio.h>
是非标准标头。
main
的返回类型应为int
。
BTW defult :
实际上并不是一个错误,因为它只是一个标签名称。
答案 2 :(得分:1)
这里的“默认”被认为是一个标记,例如在goto语句中会注意到的,因此这不是编译器错误的情况。这是你的错,而不是编译器。