我刚刚在codechef的成功提交中看到了以下代码。
http://www.codechef.com/viewplaintext/1595846
我曾经认为
float max(int n,int arr[n][n])
{....}
在C ++中不允许(因为'n'是变量)。我的CodeBlocks(在Windows上)与MinGW [gcc 4.4]给出编译时错误。 “错误:数组绑定不是整数常量。
然后CodeChef的判断如何接受这样的解决方案。 是否有任何特殊标志允许我们在C ++中执行此操作
编辑: 显示状态为AC(已接受)的链接: http://www.codechef.com/viewsolution/1595846
答案 0 :(得分:5)
ISO C99允许使用可变长度自动数组,作为扩展,GCC在C90模式和C ++中接受它们。这些数组的声明与任何其他自动数组一样,但其长度不是常量表达式。
答案 1 :(得分:4)
我的观点是纠正的:C99确实允许使用C语言,尽管很多编译器还没有实现它,有些可能永远不会(微软)。
上一个回答
将arr作为int **传递或使用
之类的东西template< int N >
float max(const int (&arr)[N][N])
{ ... }
当然要求N为编译时常量。最安全的解决方案是使用std :: vector或其他知道其大小的容器。
总的来说,代码对我来说似乎很脆弱。