Eu tenho um programa principal e um módulo. Quero que o programa principal use certas partes do módulo em circunstâncias normais, mas use alguns elementos adicionados se compilado com uma macro cpp "DEBUG". Esta é a maneira que encontrei para fazer isso funcionar:
program myprogram
use comp_module, only: data1, routine1 &
#idef DEBUG
, debug_data, debug routine
#endif
;
....
Se eu não colocar esse ponto e vírgula no final, o compilador pensará que é um erro quando não for compilado para depuração. Então, isso funciona.
Acontece que parece meio deselegante com uma vírgula inicial na linha de depuração e um ponto e vírgula inútil a seguir. E posso ver algum desenvolvedor chegando mais tarde, não entendendo o que está acontecendo e reintroduzindo um erro do compilador.
Qual é a melhor maneira?
Neste caso você pode apenas usar duas
use
declarações separadasDisseram a você a melhor maneira de lidar com isso: duas instruções USE separadas. Existem algumas coisas adicionais, possivelmente educacionais, a serem acrescentadas. Por exemplo:
No Fortran 2003, um ponto e vírgula não era permitido no início de uma linha: ponto e vírgula só podiam ser usados para separar instruções "dentro de uma linha". Existem maneiras de modificar a solução alternativa aqui, mas, como não é necessário da maneira melhor e como o Fortran 2003 é tão antigo, não vou expandir.
O erro do compilador mencionado vem de como a continuação funciona na fonte de formato livre. Assim que
&
aparecer, sinalizamos que a linha continuará. A continuação de linha procura a linha subsequente sem comentários:Ou seja, a primeira linha sem comentários é considerada uma continuação da instrução use. Se não for um ponto e vírgula ou algo que faça sentido USE, o compilador ficará chateado.
Finalmente, existe uma maneira com uma única instrução USE e sem ponto e vírgula:
Isso tem pouco a recomendar.