这个C代码是什么意思?

Jam*_*mes 2 c struct typedef

我知道typedef'ing允许你在不使用struct关键字的情况下引用结构.但是,有了这个:

typedef struct SYSTEM SYSTEM;
Run Code Online (Sandbox Code Playgroud)

我已经看到了这个的typedef在一个CAPI,但struct SYSTEM一直没有被预先定义的.

实际上,.c只包含该行的文件将自行编译.

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

非常感谢!

Ker*_* SB 5

不需要定义结构.它只需要声明.您提供的typedef声明包含声明struct SYSTEM.

所以它相当于:

struct SYSTEM;

typedef struct SYSTEM SYSTEM;
Run Code Online (Sandbox Code Playgroud)

感谢这个typedef,SYSTEM现在命名一个不完整的类型,所以你可以像SYSTEM *在接口定义中那样使用它,而不需要公开struct的实际定义,它可以保持私有:

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);
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)