作者:
heyra (涵)
2014-07-30 23:54:51開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Visual Studio 2013
問題(Question):
一直無法解決"必須是常數運算式"這error,
以下是測試程式
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
scanf("%d", &a);
int b[a];
system("pause");
return 0;
}
除了動態配置外
請問還有其他方法可以使它編譯成功嗎?
有的話是要如何修改呢?
謝謝!
int b[a] <--問題在這可以改用C++ compiler,這在C++裏面是允許的
作者: heyra (涵) 2014-07-31 00:00:00
請問一下,如果指定用C compiler呢?
作者: rebaudiana (微甜) 2014-07-31 00:02:00
C++不合法,C99才合法吧…?
作者: AstralBrain 2014-07-31 00:03:00
use std::vector
作者:
xpride (陳ㄚ智)
2014-07-31 10:54:00c++不行吧,他那知道b要配多大?
作者:
ppc ( )
2014-07-31 12:44:00int 要是const & 有 initialization才在C++合法
他要scanf 這個大概無解 用new/malloc吧
C++某個版本後的g++可以這樣做,我記得遠古的devc++都可以,VC++也是可以work的~~這個在組合語言的配置裡面會變成,先配置一個pointer再去運算那個a值以及type長度,操作esp把空間配置出來最後再把剛剛的pointer指向配置的stack frame中
作者: keeper7478 (the Servant of Cthulhu) 2014-07-31 15:41:00
這不是C++可以,是DevC++預設使用C99編譯…
作者: keeper7478 (the Servant of Cthulhu) 2014-07-31 18:48:00
VLA是C99跟GNU C extension裡面的東西,DevC++ compile的時候預設有開這個的支援,所以編得過C++「本身」是沒有 VLA 的
作者:
sunneo (艾斯寇德)
2014-08-02 00:30:00他在llvm/clang會被編譯為alloca,移動堆疊配置空間的api
alloca本來是linux only, win32是沒這東西的不過這的確是一個很合理的解法就是
作者:
kenn2001 (kenn )
2014-08-07 17:05:00b[a] 不可為變數