2026-05-22 00:24:32 +02:00
2026-01-25 18:02:55 +01:00
2026-05-22 00:24:32 +02:00
2026-05-22 00:24:32 +02:00
2026-01-22 11:38:58 +01:00
2026-05-22 00:24:32 +02:00

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

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.

Description
**WIP** Meta Programming Header Only Library for C.
Readme 84 KiB
Languages
C 99.6%
Makefile 0.4%