Вопрос: Являются ли теги для структур, которые объявлены как статическими в области файла, частной для файла, так же, как будет объявлена действительная переменная структуры? Или теги структуры являются общими для файлов?
Этот вопрос возник из-за проблемы с отладчиком MSVS2019, который показывает неправильные значения и имена членов структуры в некоторых файлах. (Вы можете прочитать об ошибке здесь, если вам интересно: Visual Studio 2019 Debugger Issue ) Все файлы были клонированы из оригинала и имеют что-то вроде этого:
static struct MyPrivateData_s
{
char *szData[64];
} myData;
static int myCount;
Фактические члены структуры меняются от файла к файлу, и значения для каждого совершенно различны.
Я знаю, что переменные объявлены как статические, но выше любых функций висходный файл имеет "область видимости файла" - глобален для этого файла только . Я почти уверен, что в системе отладки VS есть проблема, но это заставило меня задуматься о том, как (или даже , если ) класс статического хранения влияет на структуру tag .
Если тег обрабатывается как имя структуры и других переменных, он является закрытым для файла. Однако, если тег обрабатывается по-другому, он может вызывать ошибку VS. Помните, я спрашиваю только о теге структуры , а не об имени фактической структурной переменной. Также было бы полезно узнать, как на имена из typedef влияет и «static».
Я пытался найти ответ во всех различных ссылках на C, которыми владеюи могу найти в Интернете, но я (а) не знаю правильный вопрос, чтобы задать и / или (б) не понимаю (или не признаю?) ответ, когда я его нахожу. Надеюсь, гуру Си поможет мне.
FWIW, I думаю, что все, что следует за static в области видимости файла, должно быть ограничено файлом, в котором оно найдено. Фактически, только ниже точки, в которой он находится в файле. Вот как я всегда кодировал, и я никогда не сталкивался с проблемой, прежде чем эта вещь отладчика заставила меня задуматься об этом. Спасибо!
Я думаю, что это может ответить на мой вопрос: Limit Struct Scope , хотя в нем явно не используется термин «тег». Вместо этого он, кажется, называет тег «типом», который становится префиксом «struct». Таким образом, static не имеет никакого эффекта, но тот факт, что тег появляется в файле C, а НЕ в общем заголовке, означает, что тег является частным для файла. Извините, что беспокою.