gpt4 book ai didi

c - 为什么在 main() 之后有函数定义?

转载 作者:行者123 更新时间:2023-12-02 05:26:04 25 4
gpt4 key购买 nike

我认为由最权威的程序员之一 (Richard Stallman) 编写的最著名的操作系统 (linux) 中最常用的系统函数之一 ( ls ) 可能是编写得非常好的代码的一个例子。

所以,既然是开源的,我决定看看代码(参见例如 here )。在那里我发现了在 main() 之后定义的几个函数,因此在他们的电话之后,我预计这种情况非常罕见。

有经验的 C 程序员会对此发表评论吗?

最佳答案

斯托曼在这里所做的绝对没有错。

C 语言允许 forward declaration之后定义的函数。

这有很多优点,不应被视为不良行为,而是非常好的行为。

优点(并非详尽无遗):
- 让程序员快速了解 C 代码公开的 API,而无需查看所有代码
- 允许使用头文件,您可以在其中声明一个将在稍后在编译过程中定义的函数。这样你就不必每次使用它时都定义你的函数..

在这种情况下ls实现时,他只是预先声明了他将在 main() 中使用的函数,但仔细一看,main函数是第一个出现的。
这很可能是为了可读性,这样您就不必一直向下滚动才能到达程序的入口点。

请注意,词汇在这里很重要:
- 函数声明的意思是:只是告诉编译器,在你的代码中的某处,将定义一个同名的函数。
- 函数定义:实际的函数实现

int my_function( char *text); // function declaration, no implementation
int main( int argc, char **argv)
{
return my_function(argv[0]); // use of the declared function
}

// actual function definition / implementation
int my_function( char *text )
{
printf("%s\n", text);
}

编辑 : 仔细查看代码后,您可以看到 Stallman 并没有预先声明他的所有函数。他还有一种相当奇怪的定义函数的方式。我将此归因于代码的陈旧性,该代码的日期为 1985 年,当时 C 编译器的定义不如今天。
在声明或定义之前,它必须允许这种函数的使用。

最后但并非最不重要的是, ls 的最新版本源代码可以在这里找到: http://coreutils.sourcearchive.com/documentation/7.4/ls_8c-source.html ,
与 '85(Back-to-the-Future)版本相比,具有更多符合 C99 的编码。

关于c - 为什么在 main() 之后有函数定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6152048/

25 4 0
文章推荐: r - 帮助 rle 命令
文章推荐: Javascript 4D 数组
文章推荐: C程序导致段错误
文章推荐: php - PHP 中 list() 函数的问题
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com