It seems possible to define a macro to concatenate 3 token as:
#define concat3(a,b,c) a##b##c
do intermediary tokens such as the ones produced by a##b or b##c have to be valid preprocessor tokens or is it possible to paste concat3(.,.,.) successfully on all conforming implementations?(1)
(1) Many compilers support .. as a token for case ranges, which makes it a valid token, but the C Standard does not define this token, so would the concat3() macro fail on architectures that do not support it?