C 在多个头文件中使用相同的函数名是否是一种良好的做法?
我正在用C编写一个userland(目前是最小的),并且我将它制作成BusyBox,在这里,您可以通过调用带有其名称的符号链接来运行命令。我有一个“main”C文件,其中包含所有其他文件(其他文件是头文件),如果符号链接名称匹配,则运行它们的代码。我想知道在不同的头文件中使用相同名称的函数是否可以 例如,如果我有C 在多个头文件中使用相同的函数名是否是一种良好的做法?,c,header,C,Header,我正在用C编写一个userland(目前是最小的),并且我将它制作成BusyBox,在这里,您可以通过调用带有其名称的符号链接来运行命令。我有一个“main”C文件,其中包含所有其他文件(其他文件是头文件),如果符号链接名称匹配,则运行它们的代码。我想知道在不同的头文件中使用相同名称的函数是否可以 例如,如果我有thing1.h: void help(void) { // Print help text for thing1 } int thing1(int argc, char *a
thing1.h
:
void help(void)
{
// Print help text for thing1
}
int thing1(int argc, char *argv[])
{
if (something)
help();
}
void help(void)
{
// Print help text for thing2
}
int thing2(int argc, char *argv[])
{
if (something)
help();
}
和thing2.h
:
void help(void)
{
// Print help text for thing1
}
int thing1(int argc, char *argv[])
{
if (something)
help();
}
void help(void)
{
// Print help text for thing2
}
int thing2(int argc, char *argv[])
{
if (something)
help();
}
和一切.c
:
#include "thing1.h"
#include "thing2.h"
int main(int argc, char *argv[])
{
if (something)
thing1(argc, argv);
else
thing2(argc, argv);
}
最好将这些帮助函数分别重命名为
thing1\u help
和thing2\u help
,还是可以保持原样?首先,请进一步了解它们的工作原理并阅读
请注意,预处理是纯文本操作。因此,您可以避免使用任何头文件和#包含
指令,例如通过复制和粘贴内容。那是个坏主意
因此,头文件通常是一种传统的东西(然而,标准确实要求使用一些标准头,如
或
;规范也要求使用几个头)。常见做法包括:
- 使用包装头文件内容(以禁用多重包含)
- 在头文件中只放置声明,而不是(通常是“全局”)函数、类型和变量的定义
- 将
函数的定义放入头文件中静态内联
#include
)原则上甚至可以在没有任何stdlib.h
文本文件的情况下实现:例如,编译器实现可以查询数据库以处理#include
指令,但我知道没有编译器这样做
有些人(包括我)正在将#include
指令(特别是对于标准C99或Posix头)放入头文件中。其他人正在记录要包含在自己的头文件之前的头文件列表
查看代码的预处理形式(这是大多数编译器关心的,因为预处理器是编译器的第一阶段)。您可以使用with获得everything.c
的预处理表单
然后用编辑器或寻呼机查看所有内容
在实践中,我建议将thing2
astatic inline
函数设置为一个(而不是多个)标题,如果它很短的话:
然后将help
和thing1
的定义放在例如您的everything.c
中,并在其中添加一个#include“thing.h”
在其他#include
指令之后。两个帮助函数都应该是各自的c文件,那么名称冲突就无关紧要了,因为它们是该编译单元范围内的私有函数
通常,代码保存在c文件中,声明保存在h文件中。为什么不编译示例?如果你的编译器说它不好,你必须接受这一点,不管互联网上随机的家伙怎么想。为什么头文件中有代码?那是坏习惯;在两个标题中重复help()
函数不是一个好主意。思考点——真理的单一点;也要保持冷静——不要重复你自己。在头文件中嵌入实际代码也不是一个好主意。您应该只在内联函数中这样做,并且只有在您知道自己在做什么的情况下。否则,标题应该只包含变量和函数的声明,而不是定义。