我知道.h文件应该有:
但将它作为.h
文件有一些意义吗?
我尝试将我的.h
文件重命名为.c
文件,但仍然有效。
We can name our file to be anything, but we choose to name it as a .h file.
我是否正确?
答案 0 :(得分:13)
虽然确切的命名是一种约定,但是头文件和源文件的处理之间的区别不是 - 头文件不编译成目标文件,但包含在源文件中(共同形成)翻译单位)。此外,它们可能包含在多个源文件中,因此多个源文件共享相同的定义。文件的语义可能相同,但由于它们的使用,编译器对它们的处理方式不同。
就命名而言,我个人至少看过这些 - *.h
,*.H
(ugh),*.hpp
,*.hxx
,{{1} },*.hh
(对于普通标题,不仅仅是内联代码 - yuck)。通常伴随着匹配的对象文件扩展名。
请注意,标准库标题没有扩展程序 - 例如字符串。
所以这都是品味和惯例的问题 - 你将会*.inl
包含哪些内容。
答案 1 :(得分:11)
使用.h命名头文件只是一种约定。您还将看到(可能在类Unix平台上):
就个人而言,我强烈建议坚持使用.h。特别是,不要使用.H,否则如果您需要移植到不区分大小写的文件系统,您将处于痛苦的世界。
答案 2 :(得分:5)
这只是一个惯例 - “h”代表“标题”。但是,与大多数惯例一样,你需要有一个很好的理由来反对它。
答案 3 :(得分:1)
文件的名称及其扩展名对编译器来说绝对没有意义。您可以将它们命名为h.main
或其他任何名称。只记得保持包含完整。
答案 4 :(得分:1)
我认为扩展以前的Visual Studio类IDE的答案可能是值得的。
为简单起见,您应该使用编程IDE可识别的命名约定。它最重要的规则就是告诉它使用什么编译器来处理哪些文件。例如,.c将被编译为C代码,.cpp将被编译为C ++,。cc将被编译为C#,.。c将由资源编译器编译,依此类推。
命名某些.h或其他任何标准编译器选择规则未涵盖的内容,可防止文件自行编译,这就是您对头文件所需的内容。如果您在Visual Studio中尝试过将标题重命名为.c的测试,那么除非您明确地将其从构建中排除,否则它将为您编译。
您的IDE中可能还有其他工具可用 - 例如,生成类图的工具,执行源代码分析等,这些工具也可能具有您应保持兼容的文件命名约定。
答案 5 :(得分:0)
您编译并将.h和.cpp链接到.obj。然后你将.h和.obj(你的部分)交给你的伙伴(你的伙伴不知道实际代码),最后链接器将所有obj合并到一个可执行文件中。 .h是一个众所周知的指示器,告诉程序员该文件不包含定义。如果全世界都接受它,我们可以使用.xyz: - )
答案 6 :(得分:0)
我们的大型开发项目#include
来自cc文件的cc文件,用于具有数百种方法的类。我不同意,但有理由。
答案 7 :(得分:0)
此外,当你有一个makefile时,可以这样说,将所有以.c结尾的文件编译成目标文件,而不是单独指定每个文件。现在,如果您开始使用.c扩展名命名头文件,那么make系统可能会尝试将头文件编译为目标文件...
因此,单独使用* .h和* .c文件可以使所有内容保持清晰,不仅对于程序员而且对于make系统,编译器和链接器来说都是至关重要的。