int main()
{
int main=5;
printf("%d",main);
return 0;
}
在这种情况下,没有错误,gcc编译器打印5.但是,如果我写我们可以使用main,printf,scanf命名标识符吗?
int main()
{
int printf=5;
printf("%d",printf);
return 0;
}
编译器显示的error..why?
int main()
{
int main=5;
printf("%d",main);
return 0;
}
在这种情况下,没有错误,gcc编译器打印5.但是,如果我写我们可以使用main,printf,scanf命名标识符吗?
int main()
{
int printf=5;
printf("%d",printf);
return 0;
}
编译器显示的error..why?
在你的第一个代码段,您声明一个局部变量主要,这是在当地范围,所以对全球范围无影响(其中的main()函数声明)
在第二个代码片段中,您声明全局范围内的“printf”,其中的函数将在其中生效,因此存在冲突。
Downvoted?没有理由??谢谢。 – 2010-10-01 12:25:25
这不是我低估了你的意思,但是假设printf行应该在main里面,你的解释是错误的。发生该错误是因为他正在尝试将一个名为printf的int(它影响函数声明)作为函数处理。 – JeremyP 2010-10-01 12:51:06
在第二个示例中,您声明了一个名为'printf'的类型为'int'的局部变量。这将优先于同名的全局函数。所以错误在于名字'printf'是指一个int,而不是一个函数。
在第一个示例中,用局部变量'main'覆盖全局函数名'main'。如果你没有这样做,你实际上可以在主函数中调用'main'函数,而且这样做会起作用。随着你的变量声明,这是不可能的,因为局部变量声明优先 - 但它仍然是完全可用的变量形式。
在你的第一个例子中,你“隐藏”了main
函数,用int
对象代替它。
在你的第二个例子中,你“隐藏”了printf
函数,用一个int
对象代替它。 试图拨打int
是非法的。
5("foo"); /* illegal to call "function" 5 */
AFAIK第二个例子应该用C++的工作,如果你使用''::运营商中的printf调用,如:'::输出( “%d”,printf的);' – smerlin 2010-10-01 15:05:53