2010-09-19 66 views
7

爲什麼我們不能在C編程語言的結構中聲明一個靜態變量?爲什麼我們不能在C編程語言的結構中聲明一個靜態變量?

+9

因爲ISO C標準說你不行。但是如果你說出爲什麼你認爲你需要它,那麼可以爲它提供一個解決方法。 – 2010-09-19 07:38:15

+1

即使在C++中,結構中也沒有像「靜態」變量那樣的東西。這些都是靜態成員,並且C++爲另一個完全不同的語義重載了'static'關鍵字真的很可惜。特別是,它意味着文件或函數範圍內的'static'相反,即全局可見的符號。我真的沒有看到任何用途。如果你要求'extern',這*可能在C中有意義,但這將是不同的故事。 – 2010-09-19 09:56:39

+1

@Jens:函數範圍中的'static'意味着函數的所有調用都共享同一個變量實例。同樣,類中的'static'意味着類的所有實例都共享相同的字段實例。在我看來,重複使用關鍵字的動機非常好。 – 2010-09-19 10:58:02

回答

11

在C++中沒有有意義的解釋,一個結構基本上是公共所有成員的一類,因此靜態變量是很有意義的存在。

在C中,結構是一個連續的內存塊,包含字段。如果不修改靜態變量,就不能創建靜態變量(因爲要實現一個靜態,您需要從該類型的所有結構中引用單個內存位置),這在複雜性方面會有很大差異,而沒有太多好處。

+0

我知道這個.... !!!這是唯一的原因嗎? – Jagan 2010-09-19 07:46:12

+4

我想這是一個非常強大的原因。 – delnan 2010-09-19 07:49:30

4

因爲C不是C++。

因爲C標準不允許它。

因爲它在C.

+1

(zing) – 2010-09-19 07:39:01

0

因爲在c中我們不能訪問帶有結構名稱的靜態變量。 在C++中,我們可以使用類名訪問靜態成員變量,如下所示。

類名:: staticVariableName

'C' stucture不提供這樣的設施。

相關問題