如何确定此代码符合哪个C标准?
在C实验室中,出现以下uber简单代码:如何确定此代码符合哪个C标准?,c,C,在C实验室中,出现以下uber简单代码: #include <stdio.h> int suma (int a, int b) { return a+b; } int mult (int a, int b) { return a*b; } int main(void) { int a,b; printf ("Operando 1: "); scanf("%d",&a); pr
#include <stdio.h>
int suma (int a, int b)
{
return a+b;
}
int mult (int a, int b)
{
return a*b;
}
int main(void)
{
int a,b;
printf ("Operando 1: ");
scanf("%d",&a);
printf("Operando 2: ");
scanf("%d",&b);
printf("%d+%d=%d\n",a,b,suma(a,b));
printf("%d*%d=%d\n",a,b,mult(a,b));
return 0;
}
#包括
内特苏马(内特a,内特b)
{
返回a+b;
}
int mult(int a,int b)
{
返回a*b;
}
内部主(空)
{
INTA,b;
printf(“操作数1:”);
scanf(“%d”和“&a”);
printf(“操作数2:”);
scanf(“%d”和“b”);
printf(“%d+%d=%d\n”,a,b,suma(a,b));
printf(“%d*%d=%d\n”,a,b,mult(a,b));
返回0;
}
通过查看代码,我应该确定它符合哪个C标准(ANSI、ISO或事实上的K&R)。在阅读之后,我倾向于说它符合三个标准。是这样吗 如果您碰巧使用了
gcc
,使用了-std=…
、-Wall
和-pedantic
选项,您可能会更改它期望的标准,如果代码不符合,您可能会收到警告/错误。如果您碰巧使用了gcc
,使用了-std=…
,-Wall
和-pedantic
选项如果代码不符合要求,您可能会更改它期望的标准,并收到警告/错误。K&R C在函数声明中不包含参数
例如,请参见。K&R C在函数声明中不包含参数
例如,请参见。这不是K&R。K&R函数声明在括号外定义参数,如下所示:
int mult (a, b)
int a;
int b;
第一个ANSI标准引入了void
在我看来,它似乎同时符合ANSI C89和C99。它不是K&R。K&R函数声明在括号外定义了如下参数:
int mult (a, b)
int a;
int b;
第一个ANSI标准引入了void
在我看来,它似乎同时符合ANSI C89和C99。我说C89
(ANSI C89
或ISO C90
)
它不是预标准(K&R)C:函数定义在声明中包含参数的类型信息
它遵循C89标准的所有规则和C99标准(*)的所有规则。但是,C99标准规定,main
如果在没有返回语句的情况下到达结束}
,则返回0。因此,写这个的家伙必须添加返回0代码>语句。。。或者这个问题没有多大意义
(*)前两个printf应该有一个'\n'(或调用fflush(stdout);
来刷新输出我说C89
(ANSI C89
或ISO C90
)
它不是预标准(K&R)C:函数定义在声明中包含参数的类型信息
它遵循C89标准的所有规则和C99标准(*)的所有规则。但是,C99标准规定,main
如果在没有返回语句的情况下到达结束}
,则返回0。因此,写这个的家伙必须添加返回0代码>语句。。。或者这个问题没有多大意义
(*)前2个printf应该有一个'\n'(或调用fflush(stdout);
来刷新输出
将适用于ANSI C编译器
将适用于ANSI C编译器。K&R C是否允许将void
作为参数类型?ANSI或ISO(我忘了是哪个)没有规定main
必须有int argc
和char**argv
作为参数吗?@我的正确意见是:C99允许int main(void)
@JUST:我不知道第一个参数,但第二个参数是否定的。C89和C99都要求托管实现允许不带参数的main
(5.1.2.2.1)。它们还要求托管实现支持(int,char**)
版本。独立环境可以做他们喜欢的任何事情。@Steve Jessop:托管环境也可以做他们喜欢做的事情,但它被归类为“实现定义的”,即不可移植。我认为正确。我可以发誓,在某一点上,他们强制任何兼容系统使用int,char**
版本。也许这是一个早期的草案。K&R C是否允许将void
作为参数类型?ANSI或ISO(我忘了是哪个)没有规定main
必须有int argc
和char**argv
作为参数吗?@我的正确意见是:C99允许int main(void)
@JUST:我不知道第一个参数,但第二个参数是否定的。C89和C99都要求托管实现允许不带参数的main
(5.1.2.2.1)。它们还要求托管实现支持(int,char**)
版本。独立环境可以做他们喜欢的任何事情。@Steve Jessop:托管环境也可以做他们喜欢做的事情,但它被归类为“实现定义的”,即不可移植。我认为正确。我可以发誓,在某一点上,他们强制任何兼容系统使用int,char**
版本。也许这是一个早期的草案。问题肯定是,“这符合什么标准?”而不是“这是编写代码的典型方式吗?”。我认为这个问题没有多大意义,不管-(1)谁甚至关心代码是否是K&R C了,(2)谁正式将标准称为ANSI/ISO而不是C89/C99?所以我不认为你的答案应该建立在这个问题有意义的假设上;-)当然,问题是“这符合什么标准?”而不是“这是编写代码的典型方式吗?”。我认为这个问题没有多大意义,不管-(1)谁甚至关心代码是否是K&R C了,(2)谁正式将标准称为ANSI/ISO而不是C89/C99?所以我不认为你的答案应该建立在这个问题有意义的假设上;-)喘息,但那将是欺骗!;)@蒂姆,但是如果这个问题引用了你做的结果,我会更尊重这个问题