【发布时间】:2016-11-29 00:47:07
【问题描述】:
根据sbi对this question的回答,
可以根据需要多次声明标识符(语句 1)
难道不是真的
C++ 中的
include guard只是阻止函数声明 在单个源文件中多次出现(语句 2)
?
我的问题是:为什么会出现这种矛盾?还是我误解了这两种说法中的任何一种?
【问题讨论】:
-
没有。包含保护防止 header 被多次包含。根据作用域,一个标识符可以在无数文件或单个文件中被声明无数次。
-
必须保护类定义
-
稍微重读一下,只要标识符的类型不变,范围甚至可以被忽略,因为 sbi 谈论的是声明,而不是定义。
-
这里是一个简单的例子:ideone.com/hkS3Zc
-
@Nicholas 想一想
#include <string>必须有多少个标头您想一遍又一遍地处理class string { whole lotta code here };吗?然后考虑编译器必须清除和忽略的所有模板和内联函数,因为它们是相同的。最重要的是,如果某个傻瓜确实在标题中定义了一个变量怎么办?现在,您可能拥有同一个变量的数十个副本和一个非常愤怒的链接器。
标签: c++ compilation linker include c-preprocessor