上下文
我正在编写一个函数,该函数使用仅在该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;在头文件中。
答案 0 :(得分:4)
如果函数a
仅由b
使用,那么我认为不需要在任何头文件中声明它。
将两个函数放在同一个翻译单元中,并使用a
链接声明和定义函数static
作为附加约束,这将阻止其他翻译单元访问它。
由于各种后勤原因,这两个函数必须位于不同的翻译单元中,这可能需要在头文件中声明a
。在这种情况下,唯一可以做的就是评论和记录这一点。您也可以考虑单独为a
设置一个单独的命名空间,以强调这一点。
答案 1 :(得分:1)
您的C ++文件将包含a
和b
的定义(即实现) - 以您显示的方式(a
定义/提前b
)。
您的标头文件中的内容只是b
的声明。 (除非你有充分的正当理由,否则不要在头文件中定义你的函数。)
您将向客户提供头文件和库文件,他们对a
一无所知。
如果您不想为a
提供任何类型的链接,请查找匿名命名空间。 (C出于同样的目的滥用static
关键字,因此也可以在C ++中使用)
namespace {
int a(int x)
{
// whatever
return x;
} // end function definition
} // end anonymous namespace