[英]What is the problem with the following piece of code?
这段代码似乎在编译时会产生一些麻烦。 任何解释?
int i =20;
int maxlen = i;
int main()
{
int j = i;
printf("i=%d , j=%d\n", i , j);
}
在C中,您不能使用非常量表达式初始化全局变量。 将maxlen初始化为i失败,因为i
不是常量表达式。 它是C标准的一部分。
为什么不#define
一个常量?
#define MAXLEN 20
在初始化该范围内的变量时,只能使用编译时常量。 尝试:
int i = 20;
int maxlen;
int main()
{
maxlen = i; // assign within the scope of a function
int j = i;
printf("i=%d , j=%d\n", i , j);
}
此代码在C中无效,但在C ++中有效:
C - http://www.ideone.com/mxgMo
错误原因- :初始化元素不是常量
C ++ - http://www.ideone.com/XzoeU
工作 。
因为:
C ++标准规定:
3.6.1主要功能[basic.start.main]
1程序应包含一个名为main的全局函数,它是程序的指定开始。 实现定义是否需要独立环境中的程序来定义主函数。 [注意:在独立环境中,启动和终止是实现定义的; start-up包含具有静态存储持续时间的命名空间作用域对象的构造函数的执行; 终止包含具有静态存储持续时间的对象的析构函数的执行 。 - 尾注]
但是, C99说:
56.7.8初始化
4具有静态存储持续时间的对象的初始值设定项中的所有表达式应为常量表达式或字符串文字。
所以不仅仅是你发布的代码,但是这样的东西在C中也是无效的:
#include<stdio.h>
int needint(void);
int i =needint();
int needint(void)
{
return 1;
}
int main()
{
int j = i;
printf("i=%d , j=%d\n", i , j);
}
看到这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.