如何确定此代码符合哪个C标准?

时间:2010-09-20 15:33:16

标签: c

在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)。在阅读thisthis后,我倾向于说它符合三个标准。这是对的吗?

5 个答案:

答案 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)

我说C89ANSI C89ISO 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在函数声明中不包含参数。

例如,请参阅the Wikipedia text on C's history

答案 4 :(得分:0)

#if __STDC_VERSION__ >= 199901L
puts("C99");
#else
puts("C89 or pre C89");
#endif

适用于ANSI C编译器。