在C实验室中,出现了这个超级简单代码:
#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;
}
通过查看我应该确定它符合哪个C标准的代码(ANSI,ISO或事实上的K&amp; R)。在阅读this和this后,我倾向于说它符合三个标准。这是对的吗?
答案 0 :(得分:7)
这不是K&amp; R. K&amp; R函数声明定义括号外的参数,如下所示:
int mult (a, b)
int a;
int b;
和void
引入了第一个ANSI标准。
对我而言,它看起来既符合ANSI C89又符合C99。
答案 1 :(得分:4)
如果您碰巧使用gcc
,使用-std=...
,-Wall
和-pedantic
选项,您可能会更改其预期的标准,并在代码时收到警告/错误不遵守。
答案 2 :(得分:3)
我说C89
(ANSI C89
或ISO C90
)。
它不是预标准(K&amp; R)C:函数定义具有声明内参数的类型信息。
遵循C89标准的所有规则和C99标准的所有规则(*)。但是,C99标准表示main
如果在没有return语句的情况下到达结束}
则返回0。所以,写这个的人必须添加return 0;
声明......或者这个问题没有多大意义。
(*)前2个printf shoud确实有'\ n'(或之后调用fflush(stdout);
)来刷新输出
答案 3 :(得分:2)
K&amp; R C在函数声明中不包含参数。
答案 4 :(得分:0)
#if __STDC_VERSION__ >= 199901L
puts("C99");
#else
puts("C89 or pre C89");
#endif
适用于ANSI C编译器。