5

我刚刚在codechef的成功提交中看到了以下代码。

http://www.codechef.com/viewplaintext/1595846

我曾经认为

float max(int n,int arr[n][n])
{....}

在 C++ 中是不允许的(因为 'n' 是一个变量)。我的带有 MinGW [gcc 4.4] 的 CodeBlocks(在 Windows 上)给出了编译时错误。那个“错误:数组绑定不是整数常量。

那么CodeChef的法官如何接受这样的解决方案。是否有任何特殊标志可以让我们在 C++ 中做到这一点???

编辑:显示状态为 AC(已接受)的链接:http: //www.codechef.com/viewsolution/1595846

4

2 回答 2

5

ISO C99 允许可变长度自动数组,作为扩展,GCC 在 C90 模式和 C++ 中接受它们。这些数组的声明与任何其他自动数组一样,但其长度不是常量表达式。

参考: http: //gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

于 2012-12-11T11:12:29.270 回答
4

我的立场是正确的:C99 确实允许 C 这样做,尽管许多编译器还没有实现它,有些可能永远不会(微软)。

上一个答案

要么将 arr 作为 int** 传递,要么使用类似的东西

template< int N >
float max(const int (&arr)[N][N])
{ ... }

这当然需要 N 作为编译时间常数。最安全的解决方案是使用 std::vector 或其他了解其大小的容器。

总的来说,代码对我来说似乎很脆弱。

于 2012-12-11T10:49:27.580 回答