看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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; } 除了動態配置外 請問還有其他方法可以使它編譯成功嗎? 有的話是要如何修改呢? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.138.152.26 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1406735695.A.0DB.html
tjjh89017:int b[a] <--問題在這 07/30 23:56
tjjh89017:可以改用C++ compiler,這在C++裏面是允許的 07/30 23:57
heyra:請問一下,如果指定用C compiler呢? 07/31 00:00
KoenigseggG:VLA, C99 為啥不用動態配置0.0 07/31 00:01
rebaudiana:C++不合法,C99才合法吧…? 07/31 00:02
AstralBrain:use std::vector 07/31 00:03
xpride:c++不行吧,他那知道b要配多大? 07/31 10:54
ppc:int 要是const & 有 initialization才在C++合法 07/31 12:44
Killercat:他要scanf 這個大概無解 用new/malloc吧 07/31 13:41
tjjh89017:C++某個版本後的g++可以這樣做,我記得遠古的devc++都可 07/31 13:55
tjjh89017:以,VC++也是可以work的~~ 07/31 13:56
tjjh89017:這個在組合語言的配置裡面會變成,先配置一個pointer 07/31 13:58
tjjh89017:再去運算那個a值以及type長度,操作esp把空間配置出來 07/31 13:59
tjjh89017:最後再把剛剛的pointer指向配置的stack frame中 07/31 13:59
keeper7478:這不是C++可以,是DevC++預設使用C99編譯… 07/31 15:41
tjjh89017:樓上意思是? 07/31 17:09
keeper7478:VLA是C99跟GNU C extension裡面的東西,DevC++ compile 07/31 18:48
keeper7478:的時候預設有開這個的支援,所以編得過 07/31 18:48
keeper7478:C++「本身」是沒有 VLA 的 07/31 18:49
tjjh89017:原來如此 07/31 22:53
sunneo:他在llvm/clang會被編譯為alloca,移動堆疊配置空間的api 08/02 00:30
Killercat:alloca本來是linux only, win32是沒這東西的 08/02 07:27
Killercat:不過這的確是一個很合理的解法就是 08/02 07:27
kenn2001:b[a] 不可為變數 08/07 17:05