结构体初始化 initializer element is not constant
2017-08-02 14:15
525 查看
今天,同事为了让代码数据正确显示到界面上,要求我通过udp服务器发送参数设置给界面,我的主机是小端模式,对方是大端接收。本来想模拟一组数据发送过去试一试。结果发现得给他 转换字节序,于是发现了如下全局变量赋值的问题。由于是测试数据,最后就用不大于F的数进行模拟了。记录如下:
结构体初始化 initializer element is not constant
1. 例子
2.分析
全局变量是保存在静态存储区的,因此在编译的时候只能用常量进行初始化,而不能用变量进行初始化。全局变量的内存地址直接存储变量的值。在该程序中是用函数htonl的返回值给结构体成员进行初始化的,因此会出错.
htonl()函数实现主机字节序转换成网络字节序(大端字节序);
局部变量,初始化可常量,变量赋值
结构体初始化 initializer element is not constant
1. 例子
#include <stdio.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> typedef struct { unsigned int ulRecvPara; unsigned int ulSendPara; unsigned char ucSwitch; }SETSYSPARA_ST; SETSYSPARA_ST stParrRight ={ .ulRecvPara = 0x10, .ulSendPara = 0x20, .ucSwitch = 0x1, }; /*结构体初始化错误典型如下 SETSYSPARA_ST stParaError = { .ulRecvPara = htonl(0x10), .ulSendPara = htonl(0x20), .ucSwitch = 0x1, }; */ int main(int argc, char**argv) { return 0; }
2.分析
全局变量是保存在静态存储区的,因此在编译的时候只能用常量进行初始化,而不能用变量进行初始化。全局变量的内存地址直接存储变量的值。在该程序中是用函数htonl的返回值给结构体成员进行初始化的,因此会出错.
initializer element is not constant。
htonl()函数实现主机字节序转换成网络字节序(大端字节序);
总结:
全局变量是保存在静态存储区,只能用常量进行初始化局部变量,初始化可常量,变量赋值
相关文章推荐
- C C++全局变量初始化 initializer element is not constant 错误
- C语言:initializer element is not constant
- error: 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
- rbtree.c:6: error: initializer element is not constant
- initializer element is not constant 问题
- error:“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 C2099: initializer is not a constant
- 寒假软设--小型数据库进展(1)----error C2099: initializer is not a constant 或者error C2099:初始值设定项不是常量
- error C2099: initializer is not a constant
- ios Initializer element is not a compile-time constant