- C language
- Compile
- here
Type Declaration Header-Reduces reading between header files
As a technique to reduce the reading between header files in C language, I will introduce the type declaration header.
A type declaration header is a header file that uses a typedef statement to create an alias for a structure.
The file name is "spvm_typedecl.h".
Type declaration header
What we are doing in the type declaration header is to use a typedef statement to give the structure "struct spvm_field" an alias of the type "SPVM_FIELD" and to the structure "struct spvm_package" of the type "SPVM_PACKAGE". It has an alias. By the way, in order to use the integer type with guaranteed width, " stdint.h" is read. I'm loading stddef.h to allow NULL.
spvm_typedecl.h
#ifndef SPVM_TYPEDECL_H #define SPVM_TYPEDECL_H #include <stdint.h> #include <stddef.h> // spvm_field.h struct spvm_field; typedef struct spvm_field SPVM_FIELD; // spvm_package.h struct spvm_package; typedef struct spvm_package SPVM_PACKAGE; #endif
The definition of a structure can only be defined once, but the name of the structure can be declared independently and the definition of the structure can be written later.
// Declare the name of the structure first and OK
struct spvm_field;
// Give a type alias before defining the structure
typedef struct spvm_package SPVM_PACKAGE;
// Structure definition
struct spvm_field {
int32_t id;
const char * name;
SPVM_PACKAGE * package;
};;
With this in mind, you can declare the name of a structure and give it an alias in a typedef statement before defining the structure.
The following part is include guard.
#ifndef SPVM_TYPEDECL_H #define SPVM_TYPEDECL_H #endif
Next, let's look at the separate header files "spvm_filed.h" and "spvm_package.h".
Individual header file
spvm_filed.h
In "spvm_filed.h", we refer to the type SPVM_PACKAGE.
#ifndef SPVM_FIELD_H
#define SPVM_FIELD_H
#include "spvm_typedecl.h"
struct spvm_field {
int32_t id;
const char * name;
SPVM_PACKAGE * package;
};;
#endif
Notice that we are including "spvm_typedecl.h" instead of "spvm_package.h".
spvm_package.h
In "spvm_package.h", we refer to the type SPVM_FIELD.
#ifndef SPVM_PACKAGE_H
#define SPVM_PACKAGE_H
#include "spvm_typedecl.h"
struct spvm_package {
int32_t id;
const char * name;
SPVM_FIELD * fields;
};;
#endif
Notice that we are importing "spvm_typedecl.h" instead of "spvm_field.h".
In this way, instead of importing header files, the problem is solved by reading the type declaration header from individual header files.
Using type declaration headers gives your code a better view and you don't have to worry about circular reference issues.
C Language Zemi