Придумал новый способ создания header-only библиотек в С и С++

Мне никогда не нравился способ Шона Барретта, поэтому сегодня придумал вот такой, всё отличие в том, что в моём коде ничего не нужно делать, но если понадобится раздельная компиляция заголовочных файлов нужно будет на уровне команд компилятора добавлять везде файл no_ho.h

Пример:

Файл some_header_1.c

#pragma once #include <stdio.h> #include <stddef.h> #ifndef HO_API_NON_STATIC   #ifndef HO_API   #define HO_API static   #endif #endif HO_API int hello(); HO_API int world(); #ifndef HO_API_NON_STATIC   #ifndef SOME_HEADER_1_IMPLEMENTATION   #define SOME_HEADER_1_IMPLEMENTATION   #endif #endif #ifdef SOME_HEADER_1_IMPLEMENTATION HO_API int hello() {   // ... } HO_API int world() {   // ... } #endif // SOME_HEADER_1_IMPLEMENTATION

Файл no_ho.h:

#pragma once #define HO_API_NON_STATIC #define HO_API

Команды для header-only компиляции:

gcc -c ... myfile1.c gcc -c ... myfile2.c gcc ... main.c myfile1.o myfile2.o

Команды для раздельной компиляции:

gcc -include no_ho.h -DSOME_HEADER_1_IMPLEMENTATION -c ... some_header_1.c gcc -include no_ho.h -DSOME_HEADER_2_IMPLEMENTATION -c ... some_header_2.c gcc -include no_ho.h -c ... myfile1.c gcc -include no_ho.h -c ... myfile2.c gcc -include no_ho.h ... main.c myfile1.o myfile2.o some_header_1.o some_header_2.o
1