在整个项目中可以看到的一种方法

时间:2011-02-19 00:37:38

标签: c++

我有一个问题。我有一个随机数函数,我希望我的所有课程都可以使用。

主要是

我有功能

int RandomRange(int min, int max)
{
    int newValue = (rand() % max) + min;

    if ( newValue > max )
        newValue = max;
    if ( newValue < min ) 
        newValue = min;

    return newValue;
}

但是我希望我的课程能够使用这个功能。我怎么去那样的?

3 个答案:

答案 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的定义。

对于小型功能和小型项目,这些缺点通常不是问题。对于大型函数和大型项目,通常至少有一些是,这就是为什么标准安全的东西是单独的声明和定义。