2012-06-21 74 views
0

今天,我對C結構與C++結構的行爲有點驚訝。c結構不允許靜態成員,而C++做

fun.cpp:http://ideone.com/5VLPC

struct nod 
{ 
    static int i; 
}; 

int main() 
{ 

    return 0; 
} 

上述程序完美的作品。

,但

當同樣的程序在Ç環境,它給錯誤運行:

prog.c:3: error: expected specifier-qualifier-list before ‘static’ 

在這裏看到:http://ideone.com/2JRlF

爲什麼會這樣?

+1

你會如何定義它? C沒有範圍解析操作符。 – chris

+6

呃......所以不同的語言是不同的*?怎麼來的? –

+0

因爲重言式是重複式的嗎? –

回答

3

static in C only具有內部聯結的意思。不要像C++中的structclass那樣考慮C-struct。它只是一個聚合器,而不是OOP構造。

由於C沒有類,所以這種使用static沒有意義。

4

每個C++類都有它的類的命名空間看,這樣你就可以在類的命名空間外指的是靜態數據成員爲nod::i,只是普通的i裏面。 C沒有命名空間範圍,並且C結構中沒有代碼,所以沒有辦法在命名空間中隱藏全局變量,或者通過它們的非限定名稱來引用它們。所以在C中沒有任何動機讓C++被稱爲靜態數據成員。

只是做int nod_i;