gpt4 book ai didi

c - 程序编译有错误

转载 作者:行者123 更新时间:2023-12-02 19:49:58 25 4
gpt4 key购买 nike

这个程序违背了我在 C 语言中所学的一切。它是如何编译的?为什么这不需要是 int main ?为什么不返回0?您不需要在 main 之上初始声明 sub() 吗?这让我烦透了。我喜欢将我的功能放在主要功能之上。

#include <stdio.h>

main()
{
sub ();
sub ();
}

sub()
{
static int y = 5;
printf(" y is %d \n",y);
y++;
}

gcc 版本是:

gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)

这看起来是一个旧版本,但还没有老到疯狂。

https://www.gnu.org/software/gcc/releases.html

如何检查这是 c90 还是 c89?

最佳答案

此代码使用了早期 C 的一个已过时的功能,称为“隐式 int”。它的唯一用途是在代码高尔夫比赛中。事实上,甚至变量也可以这样声明。变量y可能很容易被声明

static y = 5;

可以在没有原型(prototype)化的情况下调用函数。假定该函数准确接收传递的参数数量,但受“通常的提升”影响。任何小于 int 的类型都会提升为 int,而 float 则会提升为 double

因此,这些函数的行为就像它们的原型(prototype)是:

int main(void);
int sub(void);

要返回除 int 以外的任何类型,必须指定返回类型。


您可以指定编译时希望使用的标准。

gcc -ansi
gcc -std=c99

并添加-pedantic让gcc相信你是认真的。


奇怪的是,这段代码并不严格遵守任何标准。 C99 不允许隐式 int,但允许从 main 中删除 return 0;。 C90 或“ansi”C 允许隐式 int,但需要返回。所以,返回肯定是存在的。

顺便说一句,C89 与 C90 完全相同。世界的两个半球花了一段时间才达成一致。时区和经络等等。这是相同的标准。

关于c - 程序编译有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27310553/

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