结构体初始化 initializer element is not constant 您所在的位置:网站首页 动态结构体数组初始化 结构体初始化 initializer element is not constant

结构体初始化 initializer element is not constant

2023-07-19 01:02| 来源: 网络整理| 查看: 265

今天,同事为了让代码数据正确显示到界面上,要求我通过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 实验室设备网 版权所有