7e05924ce416ddf7d8d0dc15432054588bdcce51
cmeta
Warning
Work in progress. This is not finished at all, I'm just experimenting.
Single Heaer Meta Programming Header Library for C. The same header for both codegen and runtime.
Current limitations
- Only parses
typedef struct { ... } type_name; - Will generate colliding definitions in case of types with the same name
- Parsing expects more or less correct code, if you forget a semi it will generating bad code
Quick start
- Create
main.c
typedef struct {
int int_field;
const char *const_char_star_field;
} My_Struct;
int main(void) {
return 0;
}
- Create
cmeta.c
You only have to call process_file with a file to generate type infos etc in cmeta.h.
#define CMETA_COMPTIME
#include "cmeta.h"
int main(void) {
if (!process_file("./main.c")) return 1;
return 0;
}
- Build and run cmeta
$ gcc cmeta.c -o cmeta
$ ./cmeta
- Enjoy!
You can now inspect your types!
#include "cmeta.h"
typedef struct {
int int_field;
const char* const_char_star_field;
} My_Struct;
int main(void) {
printf("My_Struct.name = %s\n", my_struct_info.name);
printf("My_Struct.fields_count = %zu\n", my_struct_info.fields_count);
return 0;
}
$ gcc main.c -o main
$ ./main
My_Struct.name = My_Struct
My_Struct.fields_count = 2
[!INFO] It runs
gcc -E, so it handles macros etc.
Description
Languages
C
99.6%
Makefile
0.4%