c - 这段C代码是什么意思?

标签 c struct typedef

我知道 typedef'ing 允许您在不使用 struct 关键字的情况下引用结构。然而,有了这个:

typedef struct SYSTEM SYSTEM;

我在 C API 中见过此 typedef,但之前struct SYSTEM 尚未定义。

事实上,仅包含该行的 .c 文件将自行编译。

编译器认为SYSTEM(或struct SYSTEM)实际上是什么?

非常感谢!

最佳答案

不需要定义该结构。只需声明即可。您提供的 typedef 声明包含 struct SYSTEM 的声明。

所以它相当于:

struct SYSTEM;

typedef struct SYSTEM SYSTEM;

多亏了这个 typedef,SYSTEM 现在命名了一个不完整的类型,因此您可以像 SYSTEM * 在接口(interface)定义中使用它,而无需公开该类型的实际定义结构体,可以保持私有(private):

public_header.h:

typedef struct SYSTEM SYSTEM;

SYSTEM * create_system();

int do_useful_thing_with(SYSTEM * system, int count, void * addr);

void destroy_system(SYSTEM * system);

private_impl.c:

#include <public_header.h>

struct SYSTEM { int a; char b[12]; float q; void * next; };

SYSTEM * create_system()
{ 
    SYSTEM * p = malloc(sizeof *p);
    if (p) { p->a = 2; p->q = 1.5; }
    return p;
}

void destroy_system(SYSTEM * system)
{
    free(system);
}

// etc.

关于c - 这段C代码是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17515919/

相关文章:

c - PIC32 UART 初始化后发送垃圾字符

c - 内存分配的最佳方式是什么

c - 如何协调两个进程之间的共享内存

无法将字符串分配给结构内的指针

c++ - C++中的泛型编程和类中的typedef

c++ - 为什么 VS2017 会警告 "Function definition not found"对于使用输入 typedef 声明但使用原始定义的函数向前?

c - 如何使用 ANSI C 以毫秒为单位测量时间?

c - 从文件中动态读取结构时 fread 不工作

c - 使用指针和 offsetof() 访问结构的正确方法是什么

objective-c - Objective-C 中的 Typedef 返回类型在 Swift 中不起作用