0

C17 标准说

如果翻译单元包含一个或多个标识符的暂定定义,并且翻译单元不包含该标识符的外部定义,则行为与翻译单元包含该标识符的文件范围声明完全相同,复合类型为翻译单元的末尾,初始化器等于 0。

这不会导致外部链接标识符出现问题吗?例如,如果您有int i4; // tentative definition, external linkage一个包含在两个文件中的标头,但在任何地方都没有任何定义。根据该子句的措辞方式,您现在似乎int i4 = 0在每个翻译单元中都有一个有效的定义,这会导致多重定义错误。它没有提到在不同的翻译单元中定义的变量阻止了这种隐含的行为。

我使用 msvc 2019 作为工具链。

4

0 回答 0