我知道typedef'ing允许你在不使用struct关键字的情况下引用结构.但是,有了这个:
typedef struct SYSTEM SYSTEM;
Run Code Online (Sandbox Code Playgroud)
我已经看到了这个的typedef在一个CAPI,但struct SYSTEM一直没有被预先定义的.
实际上,.c只包含该行的文件将自行编译.
编译器SYSTEM (or struct SYSTEM)实际上认为是什么?
非常感谢!
不需要定义结构.它只需要声明.您提供的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)