Files
cmeta/README.md
2026-05-22 00:54:07 +02:00

1.3 KiB

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

  1. Create main.c
typedef struct { 
    int int_field;
    const char *const_char_star_field;
} My_Struct;

int main(void) {
    return 0;
}
  1. 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;
}
  1. Build and cmeta
$ gcc cmeta.c -o cmeta
$ ./cmeta
  1. 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;
}

It runs gcc -E, so it process everything your code uses, including structs from cmeta itself.