2026-03-24 23:40:29 +01:00
2026-01-25 18:02:55 +01:00
2026-03-24 22:48:45 +01:00
2026-03-24 23:40:29 +01:00
2026-01-22 11:38:58 +01:00
2026-03-24 23:05:14 +01:00

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!

  1. Create main.c
typedef struct { 
    int int_field;
    const char *char_ptr_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

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
  1. 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
**WIP** Meta Programming Header Only Library for C.
Readme 62 KiB
Languages
C 99.4%
Makefile 0.6%