将具有固定数组大小的ANSI-C前函数声明转换为ANSI

时间:2013-09-26 20:00:20

标签: c ansi

我是C的新手(好吧,至少是C中的RUSTY),我正在研究Visual Studio 2010中的一些预ANSI C代码。它编译得很好,但是Intellisense对函数声明很疯狂:< / p>

int add()
    int a, int b;
{
    return a + b;
}

而不是ANSI

int add(int a, int b) 
{
    return a + b;
}

但是我遇到了一些带有函数声明边界的数组实例,我不会认为可以直接转换为ANSI C.

int add() 
    int a[5], int b[5];
{
    ...
}

以下编辑干净,但这是否完全相同?

int add(int a[5], int b[5]) {
}

1 个答案:

答案 0 :(得分:4)

是的,它意味着同样的事情,但它没有(而且从来没有)真正意味着它应该意味着什么。

参数确实是指针。通过推断,它们指向的数组中应该有5个元素,但这不会得到保证。特别是,给定:

extern int add(int a[5], int b[5]);

int x[4];
int y[6];

add(x, y);

这不会导致编译器发出警告。

使用C99,您可以让优化器假设使用(奇怪)表示法至少有5个条目:

int add(int a[static 5], int b[static 5]) { ... }

即使这不一定会在通话现场引起警告;它是编译器的信息(尽管它是否使用它取决于编译器)。