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]; //无效
6
7 const int LIM2 = 2 * LIMIT; //合法
8 const int LIM3 = 2 * LIM; //无效
9
10 int main()
11 {
12
13
14 return 0;
15 }
第5行不合法是因为当声明一个数组的时候,要求数组的长度是一个常量;
虽然可以用const来定义一个变量,使得它的值不被改变。但是,改变量也不能变成一个常量。
至于第8行,我用VC++6.0编译时,并没有发现错误。
[解决办法]
[解决办法]