I maintain a C library project both on gcc and clang.
I am looking for advice on how to make the following macros more portable, terse, readable or standard abiding.
When I compile
#define STRINGIFY(arg) STRINGIFY_(arg)
#define STRINGIFY_(arg) #arg
#define VERSION 1.01
#define PROJECT myProject
#define SUB_PROJECT mySub
#define DASH -
#include STRINGIFY(PROJECT DASH SUB_PROJECT DASH VERSION.c)
I get
clang 6.0.0 standard C99
myProject - mySub - 1.01.c
gcc 7.4.0 standard C99
myProject-mySub-1.01.c
I came up with the following solution
#define STRINGIFY(arg) STRINGIFY_(arg)
#define STRINGIFY_(arg) #arg
#define ID(arg) arg
#define VERSION 1.01
#define PROJECT myProject
#define LIB myLib
#define DASH -
#define DOTC .c
#define FILEVERSION(a, b, c, d, e) STRINGIFY(ID(a)ID(b)ID(c)ID(d)ID(e)ID(DOTC))
#include FILEVERSION(PROJECT, DASH, LIB, DASH, VERSION)