首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C primer Plus下的一个有关问题

2012-09-05 
C primer Plus上的一个问题C/C++ code #define LIMIT 20 const int LIM 50 static int data1[LIMIT]//

C primer Plus上的一个问题

C/C++ code
 #define LIMIT 20 const int LIM = 50; static int data1[LIMIT];     //合法  static int data2[LIM];       //无效const int LIM2 = 2 * LIMIT;  //合法const int LIM3 = 2 * LIM;    //无效 

代码在书上的449页 
我没搞清楚第二个无效是怎么回事?const定义的常量不能用来初始化const类型吗?
可是为什么在GCC下又可以编译通过呢? 不解。。。



[解决办法]
gcc4.5.1编译报错:

test1.c:5:12: 错误:文件域中的动态可变的‘data2’
test1.c:8:1: 错误:初始值设定元素不是常量

[解决办法]
1 #include <stdio.h>
2 #define LIMIT 20
3 const int LIM = 50;
4 static int data1[LIMIT]; //合法
5 static int data2[LIM]; //无效

7 const int LIM2 = 2 * LIMIT; //合法
8 const int LIM3 = 2 * LIM; //无效

10 int main()
11 {
12 
13 
14 return 0;
15 }

第5行不合法是因为当声明一个数组的时候,要求数组的长度是一个常量;
虽然可以用const来定义一个变量,使得它的值不被改变。但是,改变量也不能变成一个常量。

至于第8行,我用VC++6.0编译时,并没有发现错误。
[解决办法]
探讨

引用:

引用:

又复习了下const的定义
const 是标识只读变量, “常量”与“只读变量”的区别。“只读变量”是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量被修饰为只读变量,可惜再怎……

[解决办法]
探讨

引用:

引用:

引用:

gcc4.5.1编译报错:

test1.c:5:12: 错误:文件域中的动态可变的‘data2’
test1.c:8:1: 错误:初始值设定元素不是常量

额 我用的gcc 3.4.5 编译只报了一个错。。
诡异。。

把你的全部代……

热点排行