gpt4 book ai didi

c - 在多个头文件中使用相同的函数名是一种好习惯吗?

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:58 24 4
gpt4 key购买 nike

我正在用 C 语言编写一个用户区(目前是最小的),并且我正在将其设置为类似于 BusyBox,您可以在其中通过调用带有名称的符号链接(symbolic link)来运行命令。我有一个“主”C 文件,其中包含其中的所有其他文件(其他文件是头文件),然后如果符号链接(symbolic link)名称匹配则运行它们的代码。我想知道是否可以在不同的头文件中使用同名函数?

例如,如果我有 thing1.h:

void help(void)
{
// Print help text for thing1
}

int thing1(int argc, char *argv[])
{
if (something)
help();
}

thing2.h:

void help(void)
{
// Print help text for thing2
}

int thing2(int argc, char *argv[])
{
if (something)
help();
}

everything.c:

#include "thing1.h"
#include "thing2.h"

int main(int argc, char *argv[])
{
if (something)
thing1(argc, argv);
else
thing2(argc, argv);
}

将这些帮助函数分别重命名为 thing1_helpthing2_help 会更好,还是让它们保持原样?

最佳答案

首先,请了解更多 C preprocessor工作并阅读 documentation of cpp .

请注意,预处理是纯文本操作。所以你可以避免任何头文件和#include指令,例如通过复制和粘贴东西。那将是一个坏主意。

因此头文件大多是常规的东西(但是,C99 标准确实强制要求一些标准头文件,如 <stdlib.h><stdio.h> ;并且 POSIX 规范也强制要求几个头文件).常见做法包括:

  • include guard 包装头文件内容(禁用多重包含)
  • 仅在头文件中放置声明,而不是定义(通常是“全局”)函数、类型和变量。
  • 定义static inline头文件中的函数。

实际上,标准 header 包含(例如 #include <stdlib.h> )原则上什至可以在没有任何 stdlib.h 的情况下实现文本 file :编译器实现可以查询数据库以处理 #include <stdlib.h>指令,但我知道没有编译器这样做。

有些人(包括我在内)正在输入 #include头文件中的指令(特别是标准 C99 或 Posix 头文件)。其他人正在记录要包含在他们自己的头文件之前的头文件列表。

查看代码的预处理形式(这是大多数编译器关心的内容,因为预处理器是编译器的第一阶段)。您可以获得 everything.c 的预处理形式使用 GCC

 gcc -C -E everything.c > everything.i

然后往里看everything.i与编辑器或寻呼机。

在实践中,我建议 - 如果它真的很短 - 你的 thing2一个static inline函数,然后有一个单个(不是几个)标题:

// file thing.h
#ifndef THING_INCLUDED_
// declarations
void help(void);
int thing1(int argc, char *argv[]);
// definition:
static inline void thing2(int argc, char**argv) {
if (something_with(argc, argv))
help();
}
#endif /*THING_INCLUDED_*/

然后输入 help定义thing1例如你的everything.c并在那里添加 #include "thing.h"在其他人之后#include指令。

关于c - 在多个头文件中使用相同的函数名是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26250012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com