[問題] 必須是常數運算式

作者: 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;
}
除了動態配置外
請問還有其他方法可以使它編譯成功嗎?
有的話是要如何修改呢?
謝謝!
作者: tjjh89017 (伊達政宗)   2014-07-30 23:56:00
int b[a] <--問題在這可以改用C++ compiler,這在C++裏面是允許的
作者: heyra (涵)   2014-07-31 00:00:00
請問一下,如果指定用C compiler呢?
作者: KoenigseggG (地表最速)   2014-07-31 00:01:00
VLA, C99 為啥不用動態配置0.0
作者: 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:00
c++不行吧,他那知道b要配多大?
作者: ppc ( )   2014-07-31 12:44:00
int 要是const & 有 initialization才在C++合法
作者: Killercat (殺人貓™)   2014-07-31 13:41:00
他要scanf 這個大概無解 用new/malloc吧
作者: tjjh89017 (伊達政宗)   2014-07-31 13:55:00
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編譯…
作者: tjjh89017 (伊達政宗)   2014-07-31 17:09:00
樓上意思是?
作者: keeper7478 (the Servant of Cthulhu)   2014-07-31 18:48:00
VLA是C99跟GNU C extension裡面的東西,DevC++ compile的時候預設有開這個的支援,所以編得過C++「本身」是沒有 VLA 的
作者: tjjh89017 (伊達政宗)   2014-07-31 22:53:00
原來如此
作者: sunneo (艾斯寇德)   2014-08-02 00:30:00
他在llvm/clang會被編譯為alloca,移動堆疊配置空間的api
作者: Killercat (殺人貓™)   2014-08-02 07:27:00
alloca本來是linux only, win32是沒這東西的不過這的確是一個很合理的解法就是
作者: kenn2001 (kenn )   2014-08-07 17:05:00
b[a] 不可為變數

Links booklink

Contact Us: admin [ a t ] ucptt.com