c 中不透明的数据类型和结构

Opaque datatypes and structures in c

我有一个很简单的问题。 如果我有这样的源代码文件:

#include<stdio.h>
#include"example.h"


struct mystructure{
    //Data Variables
    int a;
};

int main(){
   mystructure somename;
   somename.a = 1;
   
   printf("%d\n", somename.a);
    return 0;
}

使用这样的头文件:

#ifndef EXAMPLE_HEADER_H
#define EXAMPLE_HEADER_H

// Opaque declaration.
struct mystructure;
typedef struct mystructure mystructure;

#endif

代码可以正常编译。我也可以在头文件中定义结构,它会编译正常。

但是,如果我在不同的源代码文件中定义结构并尝试使用主源代码文件对其进行编译,它将不断抛出有关前向声明的错误。

有没有办法在源代码文件中定义一个结构,在头文件中给它一个 typedef,然后在其他源文件的其他地方使用它?

我已经通过在头文件中定义结构来这样做了一段时间,但我想知道如何以一种更不透明的方式来做到这一点。

执行此声明和声明

mystructure somename;
somename.a = 1;

编译器需要知道结构的完整定义struct mystructure。例如,它需要知道为对象 somename 分配多少内存以及该结构是否具有数据成员 a.

因此结构的定义必须在存在这些声明和语句的 main 模块中可见。

要隐藏结构定义,您可以声明一个 struct mystructure * 类型的指针并调用函数来初始化该指针和指向对象的数据成员。相应的函数必须知道结构定义。