我研究了聲明和定義的概念(聯繫,範圍,持續時間)。在Visual Studio中不允許複製外部靜態聲明?
但我發現一個令人費解的錯誤:
下面的代碼是在GCC和Visual Studio 2010的
#include <stdio.h>
extern int a = 7;
extern int a;
int main()
{
printf("%d\n", a);
}
但下面的代碼罰款生成在Visual Studio中的錯誤,但罰款GCC:
#include <stdio.h>
static int a = 7;
static int a;
int main()
{
printf("%d\n", a);
}
error C2370: 'a' : redefinition; different storage class
它只是在Visual Studio編譯器中的錯誤?
編輯:這個問題竟然是的this重複。
我相信C和C++在這個問題上的不同 - 我認爲C特別指出,在同一個文件static'變量'兩個定義是指相同的變量,而C++有這個問題(我不記得他們爲什麼改變它)。確保你在Visual Studio中編譯爲C而不是C++。 –
這是一個c程序。的 – SHH
可能重複[重新定義一個全局變量時,不爲什麼重新定義靜態全局變量給出一個編譯時錯誤?(http://stackoverflow.com/questions/7215818/why-does-redefining-a-static- global-variable-give-a-compile-time-error-when-rede) –