2015-01-04 43 views
1

我從一本C++書中讀到,在ANSI C中,const值是全局的嗎?但如果我在main()中聲明const變量,那麼它將在本地範圍內,那麼我們可以怎麼說const是全局的?在ANSI C中,const值是全局的嗎?

+0

請問你能否確定這本書的內容,並且更準確地說明它的內容和內容?另外ANSI C通常不是一個非常精確的術語。 ANSI遵循ISO C標準,所以至少有三種不同的版本,C89,C99和C11。 – 2015-01-04 14:06:15

+0

作者可能試圖說沒有存儲類說明符的文件範圍'const'變量在C中具有外部鏈接,而它們默認爲C++中的內部鏈接。在兩種語言中,塊範圍變量默認都沒有鏈接。 – mafso 2015-01-04 15:21:33

+0

c中的每個段都有隻讀區.Const將指示編譯器將其放入只讀區。 – Ankur 2015-01-04 17:59:57

回答

5

C中沒有全局詞法範圍,但有一個文件範圍。對象的const限定不影響其範圍。

#include <stdio.h> 

int a = 0;   // file scope 
const int b = 0; // file scope 

int main(void) 
{ 
    int x;  // block scope 
    const int y; // block scope 
} 
+0

表示書是錯的@ouah ???正如你所說的int a = 0;是文件作用域我不認爲如此bcoz我們可以在不同的文件中使用extern int a;包括這個文件..不是嗎? – user2487315 2015-01-04 13:49:08

+2

可能值得注意的是,除了'a'和'b'變量外都有_external linkage_,通常被稱爲「全局變量」。只有'static'關鍵字可以將鏈接改爲內部鏈接(但只對於在任何函數外部聲明的變量,這些聲明內部沒有鏈接),'const'不會影響這方面的任何內容(以及在函數內部聲明的變量)。 – 2015-01-04 13:50:57

+0

@GrzegorzSzpetkowski意思是錯誤的「在ANSI C中,const值是全局的?」 bcoz它可能是塊範圍也..不是嗎? – user2487315 2015-01-04 13:54:47