2010-09-19 2 views
7

Почему мы не можем объявить статическую переменную в структуре на языке программирования C?Почему мы не можем объявить статическую переменную внутри структуры на языке программирования C?

+9

Поскольку стандарт ISO C говорит, что вы не можете. Но если вы скажете, почему вы считаете, что вам это нужно, возможно, будет возможным обходное решение для всего, что будет. –

+1

Даже в C++ нет такой вещи, как переменная 'static' внутри структуры. Это члены 'static', и очень жаль, что C++ перегружает ключевое слово' static' для еще одной совершенно другой семантики. В частности, это означает противоположность 'static' в области файлов или функций, а именно символ, который отображается глобально. Я действительно этого не вижу. Если бы вы попросили «extern», это * могло бы иметь смысл в C, но это будет другая история. –

+1

@Jens: 'static' в области функций означает, что все вызовы функции имеют один и тот же экземпляр переменной. Аналогично, 'static' в классе означает, что все экземпляры класса имеют один и тот же экземпляр поля. Мне кажется, что повторное использование ключевого слова совершенно хорошо мотивировано. –

ответ

11

В С ++ структура в основном класс со всеми членами общественных, так статическая переменная имеет смысл там.

В C структура представляет собой непрерывный фрагмент памяти с полями. Статическая переменная не может быть создана без ее изменения (чтобы реализовать статичность, вам нужно ссылаться на единую ячейку памяти из всех структур такого типа), и это будет большой разницей в сложности без особой пользы.

+0

Я знал это .... !!! Это единственная причина? – Jagan

+4

Я бы сказал, что это довольно веская причина. – delnan

4

Поскольку C не является C++.

Поскольку стандарт C не позволяет этого.

Потому что он не имеет содержательную интерпретацию в С.

+1

(zing) –

0

Поскольку в c мы не можем получить доступ к статической переменной с именем структуры. В C++ мы можем получить доступ к статической членной переменной с именем класса, как показано ниже.

ИмяКласса :: staticVariableName

stucture 'C' не дают такого объекта.