Concatenando uma macro expandida e uma palavra usando o pré-processador Fortran

Estou tentando concatenar uma palavra no código fonte com a expansão de uma macro de pré-processador. Basicamente eu tenhofoo em algum lugar do código e com um#define EXPANSION bar Eu quero obterfoobar. No entanto, estou lutando para encontrar uma maneira de fazer isso, que funcione com todos os compiladores. No momento, eu ficaria feliz se funcionasse com gfortran e ifort.

De acordo com suadocumentação, o pré-processador gfortran é um pré-processador C em execução no "modo tradicional", que não possui o## operador de colar token. No entanto, o mesmo efeito pode ser obtido com um estilo C vazio/**/ Comente. O pré-processador ifort parece se comportar mais como o pré-processador C normal, de modo que a colagem de token normal faz o truque no ifort. Infelizmente o vazio/**/ comment não funciona no ifort, pois o comentário é substituído por um único espaço.

Aqui está um pequeno exemplo:

#define EXPANSION bar
#define CAT(x,y) PASTE(x,y)
#define PASTE(x,y) x ## y

foo/**/EXPANSION   
CAT(foo,EXPANSION)

Para o qual o gfortran produz:

foobar
foo ## bar

Enquanto ifort me dá:

foo bar
foobar

Claro que eu poderia escolher o caminho certo, verificando as macros predefinidas para os dois compiladores:

#ifdef __GFORTRAN__
foo/**/EXPANSION
#else
CAT(foo,EXPANSION)
#endif

Isso funciona para os dois, mas é muito feio ter o pré-processador condicional para cada expansão. Prefiro evitar isso e ter um pouco de macro mágica apenas uma vez no começo.

Eu tenho vistoesta resposta para outra pergunta, que provavelmente me permitiria solucionar esse problema, mas prefiro encontrar uma solução que não chame o pré-processador separadamente.

Não estou muito familiarizado com o pré-processador C. Talvez haja uma maneira simples de fazer o que eu quero. Alguma ideia?

EDITAR: Eu já tentei algo assim:

#define EXPANSION bar
#define CAT(x,y) PASTE(x,y)
#ifdef __GFORTRAN__
#define PASTE(x,y) x/**/y
#else
#define PASTE(x,y) x ## y
#endif

CAT(foo,EXPANSION)

Infelizmente, isso não funciona no gfortran, onde produzfooEXPANSION. Não tenho muita certeza de como isso funciona, mas aparentemente a expansão doCAT macro impede a expansão deEXPANSION na mesma linha. Suspeito que esse seja um recurso do pré-processador C "tradicional" ...

questionAnswers(1)

yourAnswerToTheQuestion