cmeta
Warning
Work in progress. This is not finished at all, I'm just experimenting.
Meta Programming Header Only Library for C
Current limitations
- Only parses
typedef struct { ... } type_name; - Will generate colliding definitions in case of types with the same name
- Requires
stb_c_lexer
Quick start
Current implementation depends on stb_c_lexer, in future I'll use my own lexer. Because of the current setup, cmeta is not easy to use, remember, it's not finished!
- Create
main.c
typedef struct {
int int_field;
const char *char_ptr_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 cmeta
As mentionned before, stb_c_lexer is currently required, it will be removed in the future.
$ gcc cmeta.c -I./third_party/ -o cmeta
$ ./cmeta
- Enjoy!
You can now inspect your types!
#include "cmeta.h"
typedef struct {
int int_field;
const char* char_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;
}
It runs gcc -E, so it process everything your code uses, including structs from cmeta itself.
Description
Languages
C
99.4%
Makefile
0.6%