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

总结:

  1. 全局变量是保存在静态存储区,只能用常量进行初始化
  2. 局部变量,初始化可常量,变量赋值

你可能感兴趣的:(结构体初始化 initializer element is not constant)