Вы не можете использовать static
таким образом, чтобы управлять связыванием типа, как вы могли бы для функции или объекта, потому что в типах C в любом случае никогда не было связывания.
«Глобальное пространство имен» - это не совсем тот термин, который вам здесь нужен. C описывает имена объектов и функций как имеющие «внешнюю связь», если одно и то же имя может быть объявлено в разных единицах перевода, чтобы означать одно и то же (как значение по умолчанию для функций), «внутренняя связь», если одно и то же имя может быть переопределено в одна и та же единица перевода означает одно и то же (например, объявления, помеченные static
) или «отсутствие связи», когда в объявлении именуется другой объект или функция из любого другого объявления (например, переменные, определенные в теле функции). (Единицей перевода, грубо говоря, является один файл * .c вместе с содержимым включаемых в него заголовков.) Но все это не относится к типам.
Так что, если вы хотите использовать структурный тип, который по сути является закрытым для одного исходного файла, просто определите его в этом исходном файле. Тогда вам не нужно беспокоиться о том, что другое использование того же имени вступит в конфликт с вашим, если, возможно, кто-то не добавит его в заголовочный файл, который включал исходный файл.
(И только в случае, если пользователь C ++ сталкивается с этими вопросами и ответами, обратите внимание, что правила для этого в C ++ очень разные.)