美文网首页
结构体初始化 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

    今天,同事为了让代码数据正确显示到界面上,要求我通过udp服务器发送参数设置给界面,我的主机是小端模式,对方是大端...

  • Swift 结构体与类

    1:结构体 1.1:所有的结构体都有一个编译器自动生成的初始化器(initializer,初始化方法、构造器、构造...

  • Swift 初始化

    初始化器initializer 类、结构体、枚举都可以定义初始化器,类似init方法。 类的初始化 类有2种初始化...

  • go-day3

    结构体(struct) 结构体定义 结构体初始化 先声明再赋值 声明同时初始化 键值对初始化 值列表初始化 注意事...

  • SQSH1616 12-20 C基础

    一。复杂结构类型 1.结构体 2.结构体变量的初始化 (1)初始化1 (2)初始化2 (3)初始化3:生命结构体时...

  • go day05 结构体

    结构体 1.结构体的初始化 2.结构体指针变量的初始化 3.结构体成员的使用:普通变量 4.结构体成员的使用:指针...

  • 第03天(复合类型)_结构体的基本使用

    29_结构体普通变量初始化 30_结构体指针变量初始化.go 31_结构体成员的使用:普通变量.go 32_结构体...

  • Swift学习笔记-初始化

    结构体的默认初始化 swift为结构体提供了默认初始化方法,当结构体所有属性都有默认值时,可以使用空白初始化方法 ...

  • 13 C结构体

    1、why结构体? 2、结构体的初始化 3、结构体的几种定义方式

  • GO语言学习

    go语言的结构体 声明:type 结构体名 struct{x,y int}初始化:未显示初始化结构体变量的,初始值...

网友评论

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

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