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