我是C语言的新手(至少在C语言中是RUSTY),并且我正在Visual Studio 2010中处理一些ANSI C之前的代码。它可以很好地编译,但是Intellisense对函数声明感到疯狂:
int add()
int a, int b;
{
return a + b;
}
代替ANSI
int add(int a, int b)
{
return a + b;
}
但是我遇到了一些在函数声明中带有边界的数组实例,并且我认为不能直接将其转换为ANSIC。
int add()
int a[5], int b[5];
{
...
}
下面的代码可以干净地编译,但这是否完全相同?
int add(int a[5], int b[5]) {
}
是的,它的意思是相同的,但实际上(实际上从来没有)表示它应具有的含义。
参数实际上是指针。通过推论,它们指向的数组中应该有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]) { ... }
即使这样,也不一定会在呼叫现场引起警告。它是编译器的信息(尽管是否使用它取决于编译器)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句