2010-10-01 56 views
4
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?

+0

AFAIK第二个例子应该用C++的工作,如果你使用''::运营商中的printf调用,如:'::输出( “%d”,printf的);' – smerlin 2010-10-01 15:05:53

回答

2

在你的第一个代码段,您声明一个局部变量主要,这是在当地范围,所以对全球范围无影响(其中的main()函数声明)

在第二个代码片段中,您声明全局范围内的“printf”,其中的函数将在其中生效,因此存在冲突。

+0

Downvoted?没有理由??谢谢。 – 2010-10-01 12:25:25

+1

这不是我低估了你的意思,但是假设printf行应该在main里面,你的解释是错误的。发生该错误是因为他正在尝试将一个名为printf的int(它影响函数声明)作为函数处理。 – JeremyP 2010-10-01 12:51:06

1

出于任何原因,不应将函数名称用作变量名称。

+2

这不是一个答案。 – sje397 2010-10-01 12:20:49

+0

这是题目问题。 – 2010-10-01 12:24:18

+0

“是的,但你不应该”将是一个答案。你有什么只是建议。 (顺便说一下,我没有DV) – sje397 2010-10-01 12:31:28

2

在第二个示例中,您声明了一个名为'printf'的类型为'int'的局部变量。这将优先于同名的全局函数。所以错误在于名字'printf'是指一个int,而不是一个函数。

在第一个示例中,用局部变量'main'覆盖全局函数名'main'。如果你没有这样做,你实际上可以在主函数中调用'main'函数,而且这样做会起作用。随着你的变量声明,这是不可能的,因为局部变量声明优先 - 但它仍然是完全可用的变量形式。

9

在你的第一个例子中,你“隐藏”了main函数,用int对象代替它。

在你的第二个例子中,你“隐藏”了printf函数,用一个int对象代替它。 试图拨打int是非法的。

5("foo"); /* illegal to call "function" 5 */ 
相关问题