gpt4 book ai didi

c - 为什么程序编译?

转载 作者:太空狗 更新时间:2023-10-29 15:17:52 25 4
gpt4 key购买 nike

我只是想理解这个 C 代码(而不是试图通过程序实现任何功能目标)。这是使用 gcc 编译的。这是主要在main(int a, char *argv[])格式?是否允许在参数和函数体之间声明任何内容(类似于此处的 char *a;)?

#include <stdio.h>
main(u,_,a)
char
*a;
{
//printf("%s\n",_,a);//just to help debugging
//printf("%d\n",u); //just to help debugging
}

最佳答案

这是编写 C 函数的一种古老、过时的方式。

在 C 的祖先语言中,没有类型:所有变量都包含一个机器字。所以一个函数定义会像这样开始:

main(u, _, a) {
/* ... some code ... */
}

C as it used to be ,被 seminal book about C 的作者称为“K&R C” (Brian Kernighan 和 Dennis Ritchie)以一种看起来像变量声明的形式添加了类型,并且位于函数参数列表和函数代码之间。

int main(u, _, a)
int u;
int _;
char *a;
{
/* ... some code ... */
}

在 K&R C 中,如果一个类型是 int,那么在很多地方它都可以省略。对于函数参数,您可以完全省略类型声明行。

int main(u, _, a)
char *a;
{
/* ... some code ... */
}

ANSI C 1989 年被标准化,其主要创新之一是功能原型(prototype)。在正确的 ANSI C 中,您在使用前声明所有函数并声明所有参数的类型。

int main(int u, int _, char *a)
{
/* ... some code ... */
}

C 编译器仍然支持遗留代码的旧形式。 (如果它们符合 1989 年的 C 标准,它们就必须这样做。)20 多年后遗留代码已不多,因此您不会经常找到此类代码。

(请注意,这不是 main 的正确类型。我认为 Gcc 会就此警告您,但您可能必须打开警告设置。)

关于c - 为什么程序编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20693879/

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