[问题] 必须是常数运算式

楼主: 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