使用nagfor预处理器定义用户错误

3

我想要在使用不支持的Fortran编译器时中止编译。Nagfor预处理器定义了宏NAGFOR, 因此我编写了以下测试程序:

program foo

  implicit none

#ifdef NAGFOR
  PRINT *, "Hello from nagfor"
#else
#error "Compiler not supported"
#endif

end program foo

当我使用gfortran或ifort进行编译时,会出现预期的错误信息。
$ gfortran foo.F90
foo.F90:8:2: error: #error "Compiler not supported"

$ ifort foo.F90
foo.F90(8): #error:  "Compiler not supported"

但是nagfor会给出不同的错误。
$ nagfor foo.F90
NAG Fortran Compiler Release 5.3.1(907)
"foo.F90", line 8: error: unknown fpp directive.

我在nagfor的fpp文档中没有找到如何创建错误的提及,所以也许#error不存在。那么,是否有替代方法可以达到相同的效果?


fpp 似乎不知道 #error 指令。请查阅手册,了解其他可能性。 - Vladimir F Героям слава
一个可能的方法是添加一些明显的垃圾代码,让编译器自己致命地拒绝。虽然不是最理想的(因此不能作为答案),但除非你有大量的预处理(并且想要尽早中止它),否则它可能会产生相同的结果。[但同时,致命中止也不具备可移植性。] - francescalus
1个回答

1
我在NAG编译器上工作。fpp旨在在操作(和功能)方面非常轻巧。它源自Sun;我们使用的版本基于http://netlib.org/fortran/fdfpp.tgz中netlib版本的一个版本。
fpp手册(http://www.nag.co.uk/nagware/np/r60_doc/fpp.html)没有记录支持#error,这是您发现的。
正如francescalus建议的那样,实现您想要的最好的方法是使用类似以下的东西。
program foo

  implicit none

#ifdef NAGFOR
  PRINT *, "Hello from nagfor"
#else
  error "Compiler not supported"
#endif

end program foo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接