Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
标头中的每个定义都包含保护和一个编译单元 我知道开发C或C++应用程序的常用方法是将每个模块作为单独的编译单元,将定义放在其中,并为声明提供标题。有了良好的链接时间优化支持,这样的策略似乎没有问题,但根据我的经验,目前使用gcc或g++实现LTO并不是很好_C++_C - Fatal编程技术网

标头中的每个定义都包含保护和一个编译单元 我知道开发C或C++应用程序的常用方法是将每个模块作为单独的编译单元,将定义放在其中,并为声明提供标题。有了良好的链接时间优化支持,这样的策略似乎没有问题,但根据我的经验,目前使用gcc或g++实现LTO并不是很好

标头中的每个定义都包含保护和一个编译单元 我知道开发C或C++应用程序的常用方法是将每个模块作为单独的编译单元,将定义放在其中,并为声明提供标题。有了良好的链接时间优化支持,这样的策略似乎没有问题,但根据我的经验,目前使用gcc或g++实现LTO并不是很好,c++,c,C++,C,所以我的想法是(当然不是我自己的想法,我知道一些项目已经有了相同的想法),在头中定义所有内容,同时使裸函数都是静态的,使用include-guard,在最后阶段,只有一个编译单元,这样预处理后的编译器实际上可以处理整个大的源文件。我将不得不避免循环引用来实现这一点,但我从未发现循环引用是必要的;总有一些方法可以使它们具有层次性 因此,考虑到我的项目规模不太大,因此提高的编译时间是可以忍受的,那么我的想法“可用”吗?我可能遗漏了哪些其他问题?顺便说一下,我的项目对性能非常敏感;多节省一秒钟是非常重

所以我的想法是(当然不是我自己的想法,我知道一些项目已经有了相同的想法),在头中定义所有内容,同时使裸函数都是静态的,使用include-guard,在最后阶段,只有一个编译单元,这样预处理后的编译器实际上可以处理整个大的源文件。我将不得不避免循环引用来实现这一点,但我从未发现循环引用是必要的;总有一些方法可以使它们具有层次性


因此,考虑到我的项目规模不太大,因此提高的编译时间是可以忍受的,那么我的想法“可用”吗?我可能遗漏了哪些其他问题?顺便说一下,我的项目对性能非常敏感;多节省一秒钟是非常重要的。我问这个问题是因为我知道我的方法不是通常的,我无法通过谷歌搜索找到足够的资源、信息或人们的意见。非常感谢您的帮助。

从一个巨大的编译单元读取编译错误(如果是动态创建的,则更糟)将是一件非常痛苦的事情。如果它对您有效,请尝试。我不会使用它,因为我重视可维护性。如果你把所有代码都放在头文件中,并且只有一个翻译单元,那么如果你在一个头文件中做了微小的更改,所有代码都必须重新编译,而不仅仅是受影响的源文件。如果你的项目确实对性能敏感,您可能应该花时间编写性能最好的代码。像LTO这样的东西可能只会在其他东西的基础上给你一点小小的改进,但在我看来,你只需要担心你的代码已经非常有效了