您的位置:首页 > 其它

结构体初始化 initializer element is not constant

2017-08-02 14:15 525 查看
今天,同事为了让代码数据正确显示到界面上,要求我通过udp服务器发送参数设置给界面,我的主机是小端模式,对方是大端接收。本来想模拟一组数据发送过去试一试。结果发现得给他 转换字节序,于是发现了如下全局变量赋值的问题。由于是测试数据,最后就用不大于F的数进行模拟了。记录如下:

结构体初始化 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()函数实现主机字节序转换成网络字节序(大端字节序);

总结:

全局变量是保存在静态存储区,只能用常量进行初始化

局部变量,初始化可常量,变量赋值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: