![](/img/trans.png)
[英]Is there a good reason to use include guards in h files instead of cpp files?
[英]Is it a good idea to include .cpp files instead of .h files to make vanilla gcc able to optimize my code more?
出于运行速度的原因 ,在我的项目中使用#include "randombytes.cpp"
而不是randombytes.h
(其中randombytes.cpp
是我的项目源代码目录中的文件)是一个好主意吗? randombytes.cpp
看起来像这样:
#ifndef RANDOMBYTES_INCLUDED
#define RANDOMBYTES_INCLUDED
/* include native headers here */
unsigned char *fetch_random_bytes(int amount);
/* include other parts of my project here if necessary */
unsigned char *fetch_random_bytes(int amount) {
// do stuff
}
#endif
这对于需要彼此等的文件也适用,对吧? 你能想到任何不起作用的情况,或者我不会得到优化的好处吗?
这种做法被称为“Unity Build”(google it),除了琐碎的项目之外通常不是一个好主意,因为每次进行一次更改都需要重新编译整个项目,这可能意味着每次你都要等待几分钟修复一个小错误。
至于运行时性能,速度差异与使用链接时间优化进行编译没有太大差别。
是的,这通常是一种称为“统一构建”的技术,它有助于内联过程(如果编译器足够智能)。 但是,如果您具有内部链接的重复函数(即:仅存在于.cpp中并且未在.h中声明的函数),则存在这样的缺点,因为这些可能难以调试编译错误,尽管可以避免具有仔细和一致的命名约定
关于此的一些解读:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.