initializer element is not constant 问题
来源:互联网 发布:淘宝职称论文署名单位 编辑:程序博客网 时间:2024/06/04 17:18
1 #include <stdio.h> 2 3 float i = 3; 4 int j = *(int *)(&i) ; 5 6 int main (int argc , char *argv[]) 7 { 8 printf( "i = %f \n" , i ) ; 9 printf( "j = %#x \n" , j);10 return 0;11 }
对于高手,一眼就能看出其中的问题,不过对标准C语言不是很明白的可能就搞不清楚了。
编译,gcc -o text text.c、./text,出现如下错误:
1 text.c:4: error: initializer element is not constant
其中原因在于: C语言初始化一个全局变量或static变量时,只能用常量赋值,不能用变量赋值!上面的代码第3行的i是个变量,于是第4行出错。这里注意,即使第3行用const int a = 100,编译器也视a为变量。
------------------------------------------------------------------------------我是分割线------------------------------------------------------------------------------
在C++中对于以下语句:
// 全局域
int i = 3;
int j = i;
编译时将i 放入.data 段,设置其值为3.
而对于j ,编译器遇到这种语句,只知道j = i ,由于 i 是变量,不是常量,编译器无法在编译时直接得到它的值,编译器只会找到i 的地址, 然后读取这个地址的内容,再把这个内容写入 j 的地址。
计算机只会“取 i 的地址,把3 放到 i 的地址中,取 i 的地址,读取这个地址中的内容,取 j 的地址,把这个内容 写入j 的地址。编译器无法在编译时求得一个非常量的值,它只能在运行时通过读取变量地址来间接得到变量的值,而全局变量在编译时就必须确定其值,故C有静态存储区数据必须用常量初始化的规定。
在编译时只能用常量去初始化一个静态存储区的数据,而不能用“读取某个变量的内容”来初始化,所以编译器会将j 放入 .bss段,默认值为0 ,然后添加一条语句在运行时读取i 的值,再赋给j。这条语句在调用main()之前完成。
- initializer element is not constant 问题
- initializer element is not constant 问题
- initializer element is not constant
- initializer element is not constant
- initializer element is not constant
- initializer element is not constant
- 关于initializer element is not constant错误
- 关于initializer element is not constant错误
- 关于initializer element is not constant错误
- error: initializer element is not constant
- C语言:initializer element is not constant
- 关于全局变量及静态变量和initializer element is not constant问题
- [问题记录]编译时出现 initializer element is not constant 错误
- initializer element is not constant (c语言错误)
- C C++全局变量初始化 initializer element is not constant 错误
- rbtree.c:6: error: initializer element is not constant
- 为什么出现“initializer element is not constant”错误
- initializer element is not a compile-time constant
- hdu1176(dp)
- posix线程-线程的取消
- RelativeLayout里的gravity不能居中的解决方法
- POSIX线程-Per-Thread Storage
- MooseFS代码分析(一)
- initializer element is not constant 问题
- js阻止事件默认行为
- 使用LabVIEW如何生成应用程序(exe)和安装程序(installer)
- 【DP】【单调队列】【NOI2005】瑰丽华尔兹
- ubuntu14.04上安装ns-allinone-2.35
- android 应用强制停止
- libevent源码分析之事件激活
- Android下强制关闭其他程序
- MooseFS源码分析(二)