【问题标题】:User-defined errors with nagfor preprocessornagfor 预处理器的用户定义错误
【发布时间】:2017-03-16 03:04:41
【问题描述】:

如果使用了不受支持的 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 documentation 中创建错误的信息,所以 #error 可能不存在。在这种情况下,是否有其他方法可以达到相同的效果?

【问题讨论】:

  • fpp 似乎不知道 #error 指令。在手册中查看您的其他可能性。
  • 一种可能的方法是放置一些明显的垃圾,编译器本身会致命地拒绝。不理想(所以不是回答质量),但除非你有大量的预处理(并且想要尽早中止)它可能有相同的最终结果。 [而且,致命的中止是不可移植的。]

标签: compilation fortran preprocessor nag-fortran


【解决方案1】:

我在 NAG 编译器上工作。 fpp 旨在在操作(和功能)方面非常轻量级。它起源于太阳;我们正在使用基于 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-26
    • 2012-02-19
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    相关资源
    最近更新 更多