2010-09-19 9 views
7

Dlaczego nie możemy zadeklarować zmiennej statycznej w strukturze w języku programowania C?Dlaczego nie możemy zadeklarować zmiennej statycznej w strukturze w języku programowania C?

+9

Ponieważ standard ISO C mówi, że nie można. Ale jeśli powiesz, dlaczego uważasz, że jest ci potrzebna, możliwe będzie zapewnienie obejścia tego, co będzie. –

+1

Nawet w C++ nie ma czegoś takiego jak zmienna 'static' wewnątrz struktury. Są to "statyczne" elementy i naprawdę szkoda, że ​​C++ przeciąża 'static' słowo kluczowe dla jeszcze innej zupełnie innej semantycznej. W szczególności oznacza to przeciwieństwo słowa 'static' w pliku lub zakresie funkcji, a mianowicie symbol globalnie widoczny. Naprawdę nie widzę żadnego pożytku z tego. Gdybyś poprosił o "extern", to * mogłoby * mieć sens w C, ale to byłaby inna historia. –

+1

@ Jens: 'static' w zakresie funkcji oznacza, że ​​wszystkie wywołania funkcji współużytkują tę samą instancję zmiennej. Podobnie, 'static' w klasie oznacza, że ​​wszystkie wystąpienia klasy dzielą tę samą instancję pola. Wydaje mi się, że ponowne użycie słowa kluczowego jest doskonale zmotywowane. –

Odpowiedz

11

w C++, struct jest w zasadzie klasa ze wszystkimi członkami publicznych, a więc zmienna statyczna ma sens tam.

W języku C struktura jest ciągłym fragmentem pamięci z polami. Zmienna statyczna nie może zostać utworzona bez zmiany tej wartości (w celu zaimplementowania statycznego trzeba odnieść się do pojedynczej komórki pamięci ze wszystkich struktur tego typu), a to byłoby dużą różnicą w złożoności bez większych korzyści.

+0

Wiedziałem to .... !!! Czy to jedyny powód? – Jagan

+4

To byłby bardzo silny powód. – delnan

4

Ponieważ C nie jest C++.

Ponieważ standard C nie pozwala na to.

ponieważ nie ma znaczącego interpretację w C

+1

(zing) –

0

Ponieważ w c nie możemy uzyskać dostępu do zmiennej statycznej z nazwą struktury. W języku C++ możemy uzyskać dostęp do statycznej zmiennej składowej z nazwą klasy, jak poniżej.

ClassName :: staticVariableName

stucture 'C' nie zapewniają takiego obiektu.

Powiązane problemy