美文网首页
结构体初始化 initializer element is no

结构体初始化 initializer element is no

作者: Timing_173a | 来源:发表于2017-07-28 10:47 被阅读0次

    今天,同事为了让代码数据正确显示到界面上,要求我通过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()函数实现主机字节序转换成网络字节序(大端字节序);

    总结:

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

    相关文章

      网友评论

          本文标题:结构体初始化 initializer element is no

          本文链接:https://www.haomeiwen.com/subject/vpjxlxtx.html