“只在头文件中放置一个声明”的答案是正确的,但也值得知道,您可以避免使用单独的源文件进行定义,并将相应的.o
文件连接起来,方法是将其放入头文件:
inline int RandomRange(int min, int max)
{
int newValue = (rand() % max) + min;
// etc...
}
这是简单的,但同时也意味着,包括文件的每个源文件将必须处理完整定义时,它的编制,也使得包括本文件中的每个源文件将必须处理<cstdlib>
,该文件需要包含以便拨打rand()
。
对于像<cstdlib>
那样基本的小函数和头文件,过早地进行优化是担心编译时间对整个构建的影响,尽管在更改头文件时会明显影响部分构建。也有功能性的一些问题,虽然 - 如果你这样做,那么:
(a)在使用这个头文件和链接必须使用RandomRange
相同的定义共同目标文件,所以更改的内容函数体打破链接兼容性。预处理后的完全相同 - 本例中没有使用宏,因此无论哪种方式都是一样的,但可能会在这里出错。 (b)仅通过链接包含不同定义(用于调试,测试或链接时应用程序可配置性)的不同对象文件,不能替换RandomRange
的定义。
对于小功能和小项目,这些缺点通常不是问题。对于大型函数和大型项目,通常至少有一些是,这就是为什么标准安全的事情是有单独的声明和定义。