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

看板C_and_CPP作者 (Nino)時間9年前 (2014/07/30 23:54), 編輯推噓7(7017)
留言24則, 11人參與, 最新討論串1/1
開發平台(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

07/30 23:56, , 1F
int b[a] <--問題在這
07/30 23:56, 1F

07/30 23:57, , 2F
可以改用C++ compiler,這在C++裏面是允許的
07/30 23:57, 2F

07/31 00:00, , 3F
請問一下,如果指定用C compiler呢?
07/31 00:00, 3F

07/31 00:01, , 4F
VLA, C99 為啥不用動態配置0.0
07/31 00:01, 4F

07/31 00:02, , 5F
C++不合法,C99才合法吧…?
07/31 00:02, 5F

07/31 00:03, , 6F
use std::vector
07/31 00:03, 6F

07/31 10:54, , 7F
c++不行吧,他那知道b要配多大?
07/31 10:54, 7F

07/31 12:44, , 8F
int 要是const & 有 initialization才在C++合法
07/31 12:44, 8F

07/31 13:41, , 9F
他要scanf 這個大概無解 用new/malloc吧
07/31 13:41, 9F

07/31 13:55, , 10F
C++某個版本後的g++可以這樣做,我記得遠古的devc++都可
07/31 13:55, 10F

07/31 13:56, , 11F
以,VC++也是可以work的~~
07/31 13:56, 11F

07/31 13:58, , 12F
這個在組合語言的配置裡面會變成,先配置一個pointer
07/31 13:58, 12F

07/31 13:59, , 13F
再去運算那個a值以及type長度,操作esp把空間配置出來
07/31 13:59, 13F

07/31 13:59, , 14F
最後再把剛剛的pointer指向配置的stack frame中
07/31 13:59, 14F

07/31 15:41, , 15F
這不是C++可以,是DevC++預設使用C99編譯…
07/31 15:41, 15F

07/31 17:09, , 16F
樓上意思是?
07/31 17:09, 16F

07/31 18:48, , 17F
VLA是C99跟GNU C extension裡面的東西,DevC++ compile
07/31 18:48, 17F

07/31 18:48, , 18F
的時候預設有開這個的支援,所以編得過
07/31 18:48, 18F

07/31 18:49, , 19F
C++「本身」是沒有 VLA 的
07/31 18:49, 19F

07/31 22:53, , 20F
原來如此
07/31 22:53, 20F

08/02 00:30, , 21F
他在llvm/clang會被編譯為alloca,移動堆疊配置空間的api
08/02 00:30, 21F

08/02 07:27, , 22F
alloca本來是linux only, win32是沒這東西的
08/02 07:27, 22F

08/02 07:27, , 23F
不過這的確是一個很合理的解法就是
08/02 07:27, 23F

08/07 17:05, , 24F
b[a] 不可為變數
08/07 17:05, 24F
文章代碼(AID): #1JsHLF3R (C_and_CPP)