gpt4 book ai didi

c - 将 typedef 关键字与结构一起使用

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:15 25 4
gpt4 key购买 nike

将 typedef 与结构一起使用并给它两个名称(通常一个是大写字母)的确切目的是什么?

今天我在看一个 winsock 教程,偶然发现了下面的结构定义。

// IPv4 AF_INET sockets:
struct sockaddr_in {
short sin_family; // e.g. AF_INET, AF_INET6
unsigned short sin_port; // e.g. htons(3490)
struct in_addr sin_addr; // see struct in_addr, below
char sin_zero[8]; // zero this if you want to
};

typedef struct in_addr {
union {
struct {
u_char s_b1,s_b2,s_b3,s_b4;
} S_un_b;
struct {
u_short s_w1,s_w2;
} S_un_w;
u_long S_addr;
} S_un;
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;


struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};

这条线到底做了什么?

IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;

最佳答案

What exactly is the purpose of using a typedef together with a struct and giving it two names, often one in capital letters?

有三个主要组成部分

typedef struct in_addr {
// members ...
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;
  • 正在声明的几个标识符:IN_ADDR , PIN_ADDR , 和 LPIN_ADDR .就C而言,这些被大写没有意义;大概这是所选编码风格的一个方面。

  • 分别为这些标识符声明的类型 struct in_addr , struct in_addr *struct in_addr FAR * .类型声明还包含类型的定义 struct in_addr ,这是可选的,因为给出了结构标记 ( in_addr )。该定义本可以单独给出或根本不给出:

    typedef struct in_addr IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;

    struct in_addr {
    // members ...
    };
  • 声明的存储类,typedef ,这表明这些标识符不是引用具有关联存储的对象,而是充当其声明类型的别名。

总的来说,语句声明了IN_ADDR , PIN_ADDR , 和 LPIN_ADDR作为三种不同但相关的类型的别名。

关于c - 将 typedef 关键字与结构一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47292481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com