[英]Variable and constant with same name
我有一個C代碼片段如下:
const int x = 5;
void main()
{
int x[x];
int y = sizeof(x) / sizeof(int);
printf("%d",y);
}
代碼片段將被編譯並正確運行。 但我不明白如何區分x'變量'和x'常量'。
對於C ++中,這是包括在草案C ++標准節3.3.2
點聲明的 :
聲明的聲明就在其完整的聲明者(第8條)之后和初始化者(如果有的話)之前,除非如下所述。 [例如:
int x = 12; { int x = x; }
這里第二個x用它自己的(不確定的)值初始化。 - 末端的例子]
和:
[注意:外部作用域中的名稱在隱藏它的名稱聲明之前仍然可見。[示例:
const int i = 2; { int i[i]; }
聲明一個包含兩個整數的塊范圍數組。 - 末端示例] - 尾注]
所以在你的情況下:
int x[x];
該const int的 x
可見直至收盤]
。 要在該點之后引用const int x
,您可以使用限定標識符 :
::x
當然這引出了一個問題,為什么不只是使用不同的名稱而不必處理這些邊緣情況?
C
C99標准草案中的等效引號將來自第6.2.1
節標識符的范圍 ( 強調我的 ):
結構,聯合和枚舉標記具有在聲明標記的類型說明符中標記出現之后開始的范圍。 每個枚舉常量都具有在枚舉器列表中定義枚舉器出現之后開始的范圍。 任何其他標識符的范圍都在其聲明者完成之后開始。
和:
[...]在內部范圍內,標識符指定在內部范圍內聲明的實體; 在外部作用域中聲明的實體在內部作用域內是隱藏的(並且不可見)。
沒有辦法使外部范圍中的x
在C中可見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.