Is it possible to concatenate string from another macro when #including a file name (in C). For example,
I have,
#define AA 10
#define BB 20
these are parameters that change with program runs
And the file include:
#include "file_10_20" // this changes correspondingly i.e. file_AA_BB
Is it possible to have something like #include "file_AA_BB" somehow? I googled to find that double pound operator can concat strings but couldn’t find a way of doing it.
Any help would be appreciated.
First I thought “that’s easy”, but it did take a few tries to figure out:
As requested I’ll try to explain.
FILE(AA, BB)expands toFILE2(AA, BB)but thenAAandBBis expanded before FILE2, so the next expansion isFILE2(10, 20)which expands tostringify(file_10_20)which becomes the string.If you skip FILE2 you’ll end up with
stringify(file_AA_BB)which won’t work. The C standard actually spends several pages defining how macro expansion is done. In my experience the best way to think is “if there wasn’t enough expansion, add another layer ofdefine“Only stringily will not work because the # is applied before AA is replaced by 10. That’s how you usually want it actually, e.g.:
will print