Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在多个头文件中使用相同的函数名是否是一种良好的做法?_C_Header - Fatal编程技术网

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

我正在用C编写一个userland(目前是最小的),并且我将它制作成BusyBox,在这里,您可以通过调用带有其名称的符号链接来运行命令。我有一个“main”C文件,其中包含所有其他文件(其他文件是头文件),如果符号链接名称匹配,则运行它们的代码。我想知道在不同的头文件中使用相同名称的函数是否可以

例如,如果我有
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
a
static inline
函数设置为一个(而不是多个)标题,如果它很短的话:


然后将
help
thing1
的定义放在例如您的
everything.c
中,并在其中添加一个
#include“thing.h”
在其他
#include
指令之后。

两个帮助函数都应该是各自的c文件,那么名称冲突就无关紧要了,因为它们是该编译单元范围内的私有函数


通常,代码保存在c文件中,声明保存在h文件中。

为什么不编译示例?如果你的编译器说它不好,你必须接受这一点,不管互联网上随机的家伙怎么想。为什么头文件中有代码?那是坏习惯;在两个标题中重复
help()
函数不是一个好主意。思考点——真理的单一点;也要保持冷静——不要重复你自己。在头文件中嵌入实际代码也不是一个好主意。您应该只在
内联
函数中这样做,并且只有在您知道自己在做什么的情况下。否则,标题应该只包含变量和函数的声明,而不是定义。