使用gcc或clang自动生成头文件

6

如果有一个源文件source.cpp,我该如何生成相应的头文件source.hpp

我使用的是64位Linux系统,希望避免手动编写头文件以减少编程时间并限制可能出现的错误。


1
谁能说出什么是“适当的”?通常你会从类定义开始,然后让工具链从中生成源文件... - Kerrek SB
你可以尝试使用:http://www.hwaci.com/sw/mkhdr/ - trojanfoe
3
“适当”的意思是“连贯的”。如果我的 foo() 函数返回一个布尔值,那么我不希望在我的头文件中看到 int foo() 这样的代码……就是这样。 - user2485710
1
如果你这样做了,你会得到一个编译器错误,所以这种错误不太可能导致bug。你可以通过头文件黑魔法来制造更多隐蔽的ODR违规情况,而才是值得分析的有趣东西。 - Kerrek SB
如果函数的源代码在调用它的函数源代码之前,那么您就不需要函数的前向声明。例如,如果main()调用foo(),则只需将foo()源代码放在.cpp文件中的main()之前即可。对于类也是同样的道理,因为所有的代码都可以写在.h文件中——虽然这并不是一个好的实践方式。 - user152949
显示剩余4条评论
2个回答

5

从源文件自动生成适当的头文件是不可能的,因为没有对什么是“适当的头文件”的正式定义。特别是,从源文件提取声明的工具无法知道声明是否应该是私有的(只在一个翻译单元中使用)还是应该被多个翻译单元共享。在第一种情况下,头文件中的声明会被认为是不合适的。


1
https://dev59.com/wnTYa4cB1Zd3GeqPzNXs#v6WeEYcBWogLw_1b4OXG - user2485710
@user2485710 你提供了一个链接回到这个问题? - trojanfoe
1
@trojanfoe 这是一个评论的链接。 - user2485710
@user2485710 哦,原来是这样。 - trojanfoe
1
私有声明通常用static修饰符进行惯用标注,不是吗?这意味着,为了适当性,假设这样注释的声明确实是“私有的”就足够了,而那些没有[被注释]的则被暗示为“公共的”。是否有理由将这样的公共对象与链接产品相关联和嵌入其中,同时通过隐藏它们对应的声明来在编译期间禁止使用它们? - Armen Michaeli

3
您无法真正为标题生成代码,因为有些东西在头文件中是从cpp文件中猜不出来的。我想到的第一件事是可访问性(public / protected / private)和继承。
但是,如果您想提高工作流程/生产力,可以使用具有许多内置功能以帮助您编辑代码的IDE。例如,创建一个新类将创建头文件和cpp文件,添加可能的继承,标头保护等。它还可以帮助您重命名符号以便于重构。
我个人使用免费的QtCreator,但这只是个人偏好。我也使用过Visual Studio,并安装了商业插件Visual Assist X,它也提供了一些不错的功能。我知道有人喜欢Eclipse CDT,但我从未真正使用过它。
选择IDE只是个人偏好问题;)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接