2017-07-28 52 views
0

如果我有在執行和調用時可以重複函數參數名稱嗎?

#include <iostream> 
int fun(int,int); 

int main(void) 
{ 
    int foo=3; 
    int bar=5; 
    std::cout << fun(foo,bar); 
} 

int fun(int foo, int bar){ return foo+bar; } 

會不會有(可能)是混亂(由人或編譯器!)關於衝突的名字foobar,在一個函數定義,一個主程序的身體嗎? 到目前爲止,我發現結果都是正確的,但最好是知道最佳實踐。 事實上,我經常用盡想象力,並將兩個事件命名爲相同(如在示例中)。我很想知道這個問題多年,這是非常基本的,我相信在這麼長的歷史中,有人必須問過這個問題,但現在我找不到任何東西,如果重複的話,一定要告訴我。 )

+3

當你問這個問題時,你可能需要閱讀關於範圍。在不同範圍內具有相同名稱的變量並且取決於編碼風格(完全基於意見)沒有任何錯誤,因爲它可以默認使用相同名稱作爲傳遞給函數的實際參數,因爲這些參數也在功能。 – user463035818

+0

那麼對於沒有範圍概念的Python等語言呢? – Aminopterin

+3

那麼它的一個不同的問題,因爲這一個是關於c + +:P。我完全是python的初學者,但我不能相信它沒有範圍的概念 – user463035818

回答

1

對於編譯器來說,每個變量都與語言標準定義的範圍相關聯,那麼就不存在任何錯誤理解的情況。如果在編譯器無法確定變量範圍的情況下,則會引發模糊的編譯錯誤。

示例:名稱相同,但範圍不同。

int x = 10; 

void func() { 
    // the definition of local x below hides global x in current scope 
    int x = x; // local x is assigned value of global x 
    x = 5; // local x is assigned 5, this does not affect global x 
    printf("local x = %d\n", x); 
} 

int main() { 
    func(); 

    printf("global x = %d\n", x); 

    return 0; 
} 

要查看編譯器如何處理變量名稱相同,但不同的範圍,更多的How does a C compiler differentiate a local and a global variable of the same name?

爲了人類,這就是所謂的命名約定。您可以自由使用任何有效的名稱來命名變量,但建議遵循一些一致的規則 - 這將使您的代碼更具可讀性和可維護性。

相關問題