C 作用域問題

2022-03-04 21:12:55 字數 964 閱讀 5979

以c++ primer 3rd ed 習題8.1為例分析:

#includeusing namespace std;

int ix = 1024;// global scope

int ix();// 1 error: 'int ix()' redeclared as different kind of symbol

void func( int ix, int iy )

} else

//cout<<"ix: "《要求指出不同的域,哪些宣告是錯誤的。

答:1. error: 'int ix()' redeclared as different kind of symbol

不同型別也不能重名,這也同時回答了乙個問題--函式名、變數名、類名、結構名可以重名嗎?

答案是,在同乙個域下不能重名。這裡都是全域性域因此重名了。當然,過載函式是個例外(但他們引數也不同)。

2. error: declaration of 'int ix' **shadows** a parameter

同時這也回答了另乙個問題,區域性變數可以和引數名一樣嗎?顯然答案是不可以。

3.error: redeclaration of 'int ix'

note: 'int ix' previously declared here

我們知道較外層的域的命名在嵌入的域裡也是有效的,但是嵌入域*可以*定義域外層域相同的命名,同時在自己的域裡會覆蓋那個相同的名字。這裡的redeclaration of 'int ix' 指的是 local scope 3裡的ix,和if條件裡定義的ix重名了,同時提醒,ix已經定義了。local scope 5 同理。在我的編譯器下,如果if括號判斷裡沒有定義ix,那麼在if{}和else{}中分別定義ix都是可以的,結合上面來說,就是if括號裡的條件與if{}和else{}分別屬於同乙個域,但是if{}和else{}兩個卻獨立屬於兩個域。

作用域問題

編譯器可以確認4種不同型別的作用域 檔案作用域 函式作用域 塊作用域 原型作用域。塊作用域 可以被這個 塊中的所有語句訪問。注意 當 塊處於巢狀狀態,宣告於內層 塊的識別符號的 作用域到達該 塊的尾部 當 塊不是巢狀的時,宣告 於每個 塊的變數無法被另乙個 塊 訪問。檔案作用域 任何在所有 塊之外宣...

作用域問題

2018 12 20 寫指令碼的時候,我明明把這個東西當作全域性變數了,但是就是老報錯。檢查了發現,是因為有的全域性變數成立是因為他只做了讀操作,但有些地方的寫操作寫了之後,函式出來後就不對了。所以一定要加global 2019 01 10 我發現乙個問題,還是變數作用域的問題,這就比較尷尬,他媽的...

css作用域問題

1 scoped作用域問題。1 元件內樣式,預設始終加上scoped屬性。如 2 需要影響到子元件內部樣式,優先使用深度作用選擇器 deep 如 3 對於js生成的子元件元素,可以不新增scoped。但是最外層樣式需要加上當前元件的class標識,名稱命名規範為modulename componen...