const 常量无法在数组定义时作为数组长度?

jeisy 2008-07-03 01:43:20
在网上看到一个资料(关于嵌入式开发的)里有这样一种说法:


4.4 const 常量
如:
const int MAX_STUDENT = 100;
优点:const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者
进行类型安全检查。
缺点: const 常量无法在数组定义时作为数组长度。如:
float StudentHeight[MAX_STUDENT]; //错误

我在VC上(XP系统)编译了,是可以的啊!

是不是在其他一些环境里是不可以的啊?在一些嵌入式系统里面不可以这样写?

...全文
1622 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeisy 2008-07-03
  • 打赏
  • 举报
回复
呵呵,多谢大侠奥芝!
关于栈和编译的问题,我再好好学习学习,不懂了再问!
deb999 2008-07-03
  • 打赏
  • 举报
回复
C中用CONST 用的比C++多的多 呵呵
不过你那种用法C99以上版本才支持
lyle3 2008-07-03
  • 打赏
  • 举报
回复
学习了~
tjfangyan 2008-07-03
  • 打赏
  • 举报
回复
一般,在c++中才使用const
aozhi 2008-07-03
  • 打赏
  • 举报
回复
忘记说主题了,既然const变量是在栈里的,它在程序运行时才能确定里面的值是多少,那么编译的时候它里面的值又怎能取得到呢?显然就不能用来定义数组的大小了。
aozhi 2008-07-03
  • 打赏
  • 举报
回复 1
const常量?
一听见这种说法,就知道不是老牌C语言程序员。
用const声明的变量是在栈里的,只是其内容不能在代码中被改变,它不是在静态内存中的,访问它的时候弹栈,而不能像真正的常量一样直接从一个已知的固定的内存地址中取得,这对于早一点的C语言编译器来说是不可能的。所以老C语言程序员一般都习惯称const变量为只读变量,而不是什么常量。C语言中的常量应该是类似0x00和1ul这种东西。
yyyapple 2008-07-03
  • 打赏
  • 举报
回复
编译器也在进步啊
visame 2008-07-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 jeisy 的帖子:]
在网上看到一个资料(关于嵌入式开发的)里有这样一种说法:


4.4 const 常量
如:
const int MAX_STUDENT = 100;
优点:const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者
进行类型安全检查。
缺点: const 常量无法在数组定义时作为数组长度。如:
float StudentHeight[MAX_STUDENT]; //错误

我在VC上(XP系统)编译了,是可以的啊!

是不是在其他一些环境里是不可以的啊?在一些嵌入式系统里面…
[/Quote]
C里面不可以这样
C++里面可以
因为嵌入式目前主要用C,所以以上说法是针对C的。
VC编译器使用的是C++环境。
In C++, you can do something like

const int ArraySize = 100;
int Array[ArraySize];

while in ANSI C, this would be flagged as an error.
K行天下 2008-07-03
  • 打赏
  • 举报
回复
只是老式的TC不支持
最新的C99编译器应该支持的!!!
jeisy 2008-07-03
  • 打赏
  • 举报
回复
哦,大概VC是C++的编译器吧!

但是,为什么不可以呢?为什么C语言里的常量就不能用来定义数组的大小呢?
K行天下 2008-07-03
  • 打赏
  • 举报
回复
可以作为数组长度!!
你在哪里看得?
chenhu_doc 2008-07-03
  • 打赏
  • 举报
回复
const int MAX_STUDENT = 100;
float StudentHeight[MAX_STUDENT]; //正确
就当成是编译器不够完善吧。
clhposs 2008-07-03
  • 打赏
  • 举报
回复
C语言的const并不是真正意义上的静态

C++里面的const才是 所有C++里面的const可以做数组长度使用 而C不行

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧