struct переменная
Для структуры переменная как static struct S s;
, это широко обсуждалось на: Что делает«статическое» среднее в C?
struct определение : без эффекта :
static struct S { int i; int j; };
точно так же, как:
struct S { int i; int j; };
, поэтому никогда не используйте его.GCC 4.8 выдает предупреждение, если вы делаете это.
Это потому, что определения структур не имеют хранения и не генерируют символы в объектных файлах, таких как переменные и функции.Просто попробуйте скомпилировать и декомпилировать:
struct S { int i; int j; };
int i;
с помощью:
gcc -c main.c
nm main.o
, и вы увидите, что нет символа S
, но есть символ i
.
Компилятор просто использует определения для вычисления смещения полей во время компиляции.
Это определения структуры, как правило, включаются в заголовки: они не будут генерировать несколько отдельных данных, даже если они включены несколько раз.
То же самое относится к enum
.
C ++ struct определение : устарело в C ++ 11
C ++ 11 Стандартный эскиз N3337 Приложение C 7.1.1:
Изменение: В C ++ статические или внешние указатели могут применяться только к именам объектов или функций. Использование этихСпецификаторы с объявлениями типов недопустимы в C ++.В Си эти спецификаторы игнорируются при использовании в объявлениях типов.
См. Также: https://stackoverflow.com/a/31201984/895245