我有一个问题。我有一个随机数函数,我希望我的所有课程都可以使用。
主要是
我有功能
int RandomRange(int min, int max)
{
int newValue = (rand() % max) + min;
if ( newValue > max )
newValue = max;
if ( newValue < min )
newValue = min;
return newValue;
}
但是我希望我的课程能够使用这个功能。我怎么去那样的?
答案 0 :(得分:4)
创建标题:
#ifndef RANDOM_RANGE_H_INLCUDED_
#define RANDOM_RANGE_H_INLCUDED_
int RandomRange(int, int);
#endif
然后在任何需要使用该函数的文件中包含该标头。
如果你有时间,你可能想要写一个更好的implementation函数。
答案 1 :(得分:1)
在头文件中声明它是一个独立的函数,然后从任何地方#include
它?
答案 2 :(得分:0)
答案说“只在头文件中放置一个声明”是正确的,但是也值得知道你可以避免单独的源文件定义,并链接相应的.o
文件,通过这个这在头文件中:
inline int RandomRange(int min, int max)
{
int newValue = (rand() % max) + min;
// etc...
}
这更简单,但意味着包含该文件的每个源文件在编译时都必须处理完整定义,并且包含此文件的每个源文件都必须处理<cstdlib>
,这文件需要包含才能调用rand()
。
对于这样一个小函数和一个像<cstdlib>
那样基本的标题,过早优化会担心它对完整构建的编译时间的影响,尽管它会明显影响这个头文件的部分构建改变了。但是也存在一些功能问题 - 如果你这样做的话:
(a)使用此头文件并链接在一起的目标文件必须使用相同的RandomRange
定义,因此更改函数体的内容会破坏链接兼容性。 在预处理之后是相同的 - 在这个例子中没有使用宏,所以它们都是相同的,但是这里可能会犯错误。
(b)只能通过链接包含不同定义的不同目标文件(用于调试,测试或链接时应用程序可配置性)来替换RandomRange
的定义。
对于小型功能和小型项目,这些缺点通常不是问题。对于大型函数和大型项目,通常至少有一些是,这就是为什么标准安全的东西是单独的声明和定义。