Ограничивает ли ansi C количество внешних переменных в программе? - PullRequest
1 голос
/ 26 июля 2011

Под внешней переменной я подразумеваю переменную, объявленную с модификатором extern (и определенную в другом месте в программе).

Мне сообщили об этом ограничении, и я не смог найтиподтверждение или опровержение в Интернете.Это правда?Если да, то какой предел?Это обычно применяется компиляторами?

Ответы [ 3 ]

8 голосов
/ 27 июля 2011

Стандарт C99 устанавливает несколько лимитов перевода (5.2.4.1). Один из них:

4095 внешних идентификаторов в одной единице перевода

Стандарт C89 устанавливает этот предел (2.2.4.1):

511 внешних идентификаторов в одной единице перевода

Обратите внимание, что это минимальные пределы для соответствующих реализаций, а не абсолютные.

4 голосов
/ 27 июля 2011

Да, существует минимальное ограничение, которое должен поддерживать каждый компилятор.

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

2 голосов
/ 27 июля 2011

Насколько я понимаю, язык не накладывает максимального ограничения. Компиляторы и платформы будут налагать ограничение.

Компиляторы могут ограничивать количество из-за памяти, которую они хотят посвятить отслеживанию и переводу этих данных.

Платформа всегда имеет ограниченное пространство для переменных.

...