C++11 为什么包含cpp会产生不同的结果

C++11 为什么包含cpp会产生不同的结果,c++11,boost,C++11,Boost,我学到了“包含”关键字只是复制和粘贴 但包含cpp文件会产生不同的编译结果。 (gcc6~8+boost1.69) //main.cpp #包括 //我将下一个代码移到why.cpp #包括 #包括 #包括 #包括 #包括 void testFunc() { 使用名称空间boost::archive::迭代器; typedef变换_宽度ItBinaryT; std::字符串输入; 字符串输出(ItBinaryT(input.begin()),ItBinaryT(input.end()); } /

我学到了“包含”关键字只是复制和粘贴

但包含cpp文件会产生不同的编译结果。 (gcc6~8+boost1.69)

//main.cpp
#包括
//我将下一个代码移到why.cpp
#包括
#包括
#包括
#包括
#包括
void testFunc()
{
使用名称空间boost::archive::迭代器;
typedef变换_宽度ItBinaryT;
std::字符串输入;
字符串输出(ItBinaryT(input.begin()),ItBinaryT(input.end());
}
// -----------------------------
int main()
{
返回0;
}
上面的代码编译时没有警告

但是,我用include cpp替换了一些代码

//main.cpp
#包括

#包括“why.cpp”//您的编译器在假设主cpp文件中定义的内容不太可能有多个定义的情况下,特别对待主cpp文件,因此在该文件中不会执行一些可能违反一个定义规则的测试。使用
#include
会将您带到该文件之外


我建议不要使用
-Wsubobject linkage
,因为它的逻辑是基于不适用于您的代码的启发式的。

您的编译器特别处理主CPP文件,因为它中定义的内容不太可能有多个定义,因此一些测试可能违反一个定义定义规则未在该文件中完成。使用
#include
会将您带到该文件之外


我建议不要使用
-Wsubobject linkage
,因为它的逻辑是基于启发式的,不适用于您的代码。

包括.cpp文件是个坏主意!!!!我知道,但我真的需要它来UnityBuild..包含文件的扩展名在这里并不重要,只是可以传递地包含那些头。很奇怪。。。也许是编译器的怪癖?“叮当”似乎沉默了…@ana湿润你说“需要它来团结UID”是什么意思?你永远不需要包含
cpp
files@bolov我想减少构建时间。所以我尝试将所有cpp文件包含到单个cpp文件中。包含.cpp文件是个坏主意!!!!我知道,但我真的需要它来UnityBuild..包含文件的扩展名在这里并不重要,只是可以传递地包含那些头。很奇怪。。。也许是编译器的怪癖?“叮当”似乎沉默了…@ana湿润你说“需要它来团结UID”是什么意思?你永远不需要包含
cpp
files@bolov我想减少构建时间。所以我尝试将所有cpp文件包含到单个cpp文件中。