结构体初始化 initializer element is not constant | 您所在的位置:网站首页 › 动态结构体数组初始化 › 结构体初始化 initializer element is not constant |
今天,同事为了让代码数据正确显示到界面上,要求我通过udp服务器发送参数设置给界面,我的主机是小端模式,对方是大端接收。本来想模拟一组数据发送过去试一试。结果发现得给他 转换字节序,于是发现了如下全局变量赋值的问题。由于是测试数据,最后就用不大于F的数进行模拟了。记录如下: 结构体初始化 initializer element is not constant 1. 例子 #include #include #include #include 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()函数实现主机字节序转换成网络字节序(大端字节序); 总结: 全局变量是保存在静态存储区,只能用常量进行初始化局部变量,初始化可常量,变量赋值 |
CopyRight 2018-2019 实验室设备网 版权所有 |