guowenxue
2024-06-25 8b691b645fb73d244b46dfa6f094ec299b202f67
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#ifndef _JTEST_DEFINE_H_
#define _JTEST_DEFINE_H_
 
/*--------------------------------------------------------------------------------*/
/* Macros and Defines */
/*--------------------------------------------------------------------------------*/
 
/**
 *  Makes a symbol for use as a struct name. Names made this way have two parts;
 *  the first parts is a prefix common to all structs of that class. The second
 *  is a specifier which differs for each instance of that struct type.
 */
#define JTEST_STRUCT_NAME(prefix, specifier)    \
    CONCAT(prefix, specifier)
 
/**
 *  Define a struct with type with a name generated by #JTEST_STRUCT_NAME().
 */
#define JTEST_DEFINE_STRUCT(type, struct_name)    \
    type struct_name
 
/**
 *  Declare a struct with type with a name generated by #JTEST_STRUCT_NAME().
 */
#define JTEST_DECLARE_STRUCT(struct_definition) \
    extern struct_definition
 
/**
 *  Define and initialize a struct (created with JTEST_DEFINE_STRUCT()) and
 *  initialize it with init_values.
 */
#define JTEST_INIT_STRUCT(struct_definition, init_values)       \
    struct_definition = {                                       \
        init_values                                             \
    }
 
#endif /* _JTEST_DEFINE_H_ */