Suppose you are writing a library that uses internally certain data structures, and wants to export to the user only a subset of them (or hide the exact type using something like `void *`). The definitions for all the structs and functions used in the library are in a header `library.h`, which will be used when building the library.

Is it considered good practice to also produce another copy of `library.h` that would not be used during the build process but only by users linking to the library?

For example suppose the library internally uses the following `library.h`:

```
#ifndef LIBRARY_H
#define LIBRARY_H

struct myStruct {
    int some_x;
    void (*some_callback)(void);
};

typedef struct myStruct *myStruct_t;

#endif

```

While we would like to hide the definition of `myStruct` to the user, so we export a header `library.h` that is:

```
#ifndef LIBRARY_H
#define LIBRARY_H

typedef void *myStruct_t;

#endif

```