头文件中一个函数使用的函数

时间:2016-08-23 22:05:15

标签: c++ header

上下文

我正在编写一个函数,该函数使用仅在该main函数中需要的其他函数。该主要功能的目的是制作一种可以调用所需功能的工具包。

为例

int a(int x) // make x = 10 in a recursive way and its purpose is limited 
             // to be used with function b
{
    if (x == 10) return x;
    else if(x<10) return a(x+1);
    else return a(x-1);
}

int b(int x, int allow_b) // This is only an exemple, function b simply call function a if required.
{
    if (allow_b == 1) return a(x);
    else return x;
}

问题

因为功能&#39; a&#39;只有在&#39; b&#39;中才能使用,如果在头文件中有特定的事情要做,或者只应在函数&#39; a&#39;上进行评论。是由&#39; b&#39; ?

这种方法有问题吗?

修改

我的意思是应该在标题中声明什么,我不是在谈论写作功能&#39; a&#39;和&#39; b&#39;在头文件中。

2 个答案:

答案 0 :(得分:4)

如果函数a仅由b使用,那么我认为不需要在任何头文件中声明它。

将两个函数放在同一个翻译单元中,并使用a链接声明和定义函数static作为附加约束,这将阻止其他翻译单元访问它。

由于各种后勤原因,这两个函数必须位于不同的翻译单元中,这可能需要在头文件中声明a。在这种情况下,唯一可以做的就是评论和记录这一点。您也可以考虑单独为a设置一个单独的命名空间,以强调这一点。

答案 1 :(得分:1)

您的C ++文件将包含ab定义(即实现) - 以您显示的方式(a定义/提前b)。

您的标头文件中的内容只是b声明。 (除非你有充分的正当理由,否则不要在头文件中定义你的函数。)

您将向客户提供头文件和库文件,他们对a一无所知。

如果您不想为a提供任何类型的链接,请查找匿名命名空间。 (C出于同样的目的滥用static关键字,因此也可以在C ++中使用)

namespace {
  int a(int x)
  {
    // whatever
    return x;
  } // end function definition
} // end anonymous namespace
相关问题