You can get better properties by using the include itself to do the macro expansion, e.g.
#define VECTOR_TYPE int
#include “vector.h”
This will let you step into the macro generated functions in GDB and doesn’t require putting the function creation in macros (no backslashes, can write the implementations like normal code)
You can also get syntax like this that way
Vector_Push(int)(&vec, 1);
Which imo does a better job distinguishing the type from the name
I agree that the debugging and maintenance experience is much better that way, but it comes at the cost of very poor "DX". We, discussing this here on this thread, understand what's going on. But sadly at least for the projects I'm involved in, the average developer does not.
TBH, rather than fancy high-meta generic support, I'd be much more appreciative of ISO C adding something like "_Include" to the preprocessor, e.g.
#define VECTOR_TYPE int #include “vector.h”
This will let you step into the macro generated functions in GDB and doesn’t require putting the function creation in macros (no backslashes, can write the implementations like normal code)
You can also get syntax like this that way Vector_Push(int)(&vec, 1);
Which imo does a better job distinguishing the type from the name