我是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]) {
}
答案 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]) { ... }
即使这不一定会在通话现场引起警告;它是编译器的信息(尽管它是否使用它取决于编译器)。