未知边界参数的多维数组:C 和 C++ 之间的区别

Bér*_*ger 5 c c++ gcc c99

以下程序编译为 C 程序:

\n
#include <stdlib.h>\n#include <stdio.h>\n\nvoid f(int n, int m, int x[n][m]) {\n  printf("x[0][2] = %i\\n",x[0][2]);\n}\n\nint main() {\n  int v[][3] = { {0,1,2}, {3,4,5} };\n\n  f(2,3,v);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

然而,当用 g++ 编译为 C++ 时,我有:

\n
main.c:4:29: error: use of parameter outside function body before \xe2\x80\x98]\xe2\x80\x99 token\n void f(int n, int m, int x[n][m]) {\n                             ^\n
Run Code Online (Sandbox Code Playgroud)\n

看来C的这个特性在C++中并不存在。是否可以向 g++ 提供任何标志以使其接受代码?

\n

Lun*_*din 2

看来C的这个特性在C++中并不存在。

正确的。

是否可以向 g++ 提供任何标志以使其接受代码?

不,没有这样的功能允许 VLA 作为参数列表的一部分。您必须将代码编译为 C。

存在其他类似的 gcc 扩展,请参阅:https ://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html