2010-09-19 12 views
7

Warum können wir keine statische Variable innerhalb einer Struktur in der Programmiersprache C deklarieren?Warum können wir keine statische Variable innerhalb einer Struktur in der Programmiersprache C deklarieren?

+9

Weil ISO C Standard besagt, dass Sie nicht können. Aber wenn Sie sagen, warum Sie denken, dass Sie es brauchen, könnte es möglich sein, einen Workaround für das bereitzustellen, was auch immer es sein mag. –

+1

Selbst in C++ gibt es keine so genannte "statische" Variable in einer Struktur. Dies sind 'statische' Member, und es ist wirklich schade, dass C++ das' static' Schlüsselwort für eine weitere völlig andere Semantik überlädt. Insbesondere bedeutet es das Gegenteil von "statisch" im Datei- oder Funktionsumfang, nämlich ein Symbol, das global sichtbar ist. Ich sehe wirklich keinen Nutzen davon. Hättest du nach "extern" gefragt, könnte das * in C sinnvoll sein, aber das wäre eine andere Geschichte. –

+1

@Jens: 'static' im Funktionsumfang bedeutet, dass alle Aufrufe der Funktion die gleiche Instanz einer Variablen teilen. Entsprechend bedeutet "statisch" in einer Klasse, dass alle Instanzen der Klasse die gleiche Instanz des Feldes teilen. Es scheint mir, dass die Wiederverwendung des Keywords perfekt motiviert ist. –

Antwort

11

In C++ hat, ist eine Struktur im Grunde eine Klasse mit allen Mitgliedern der Öffentlichkeit, so dass eine statische Variable macht es sinnvoll.

In C ist eine Struktur ein zusammenhängendes Stück Speicher mit Feldern. Eine statische Variable kann nicht erstellt werden, ohne diese zu ändern (um eine statische Variable zu implementieren, müssen Sie auf einen einzelnen Speicherort von allen Strukturen dieses Typs verweisen), und das wäre ein großer Unterschied in der Komplexität ohne großen Nutzen.

+0

Ich wusste das .... !!! Ist das der einzige Grund? – Jagan

+4

Ich würde sy das ist ein ziemlich starker Grund. – delnan

4

Weil C nicht C++ ist.

Weil der C-Standard es nicht erlaubt.

Weil es keine sinnvolle Interpretation in C.

+1

(zing) –

0

Da in c können wir nicht auf statische Variable mit Strukturnamen zugreifen. In C++ können wir auf statische Membervariable mit Klassennamen wie unten zugreifen.

Classname :: staticVariableName

'C' stucture bieten keine solche Anlage.

Verwandte Themen