ansi C是否限制程序中的外部变量数量?

外部变量我指的是用extern修饰符声明的变量(并在程序的其他地方定义)。

我被告知这个限制,无法在网上找到确认或反驳。 这是真的? 如果是这样,这是限制吗? 它通常是由编译器强制执行的吗?

是的,每个编译器都应该支持一个最小限制。

在这种情况下,每个编译器应该能够在一个转换单元中支持至少 4095个外部标识符(但大多数编译器可能支持更多)。

C99标准规定了几个转换限制(5.2.4.1)。 其中之一是:

一个翻译单元中有4095个外部标识符

C89标准规定了此限制(2.2.4.1):

一个翻译单元中有511个外部标识符

请注意,这些是符合实现的最小限制,而不是绝对限制。

我的理解是该语言没有施加最大限制。 编译器和平台会施加限制。

编译器可能会因为他们想要用于跟踪和翻译它们的内存而重新计算数量。

平台的变量空间总是有限的。