预处理器宏在Fortran代码中无法在Windows上运行

时间:2014-05-25 15:23:18

标签: macros fortran gfortran

亲爱的所有我有一个包含预处理器宏的小型Fortran程序。以下是一个最小的例子。在mac os x上,它运行良好,但是当我在Windows 7(64位)上编译它时,它总是打印unknown operating system。我在Windows 7上使用gfortran-4.8.0(mingw32)。

      program foo
      implicit integer(i-n), double precision (a-h,o-p),
     + character*8(x-z)
*
#ifdef _WIN64
      zterm = 'wxt'
#elif _WIN32
      zterm = 'wxt'
#elif __APPLE__
      zterm = 'aqua'
#elif __linux
      zterm = 'x11'
#elif __unix
      zterm = 'x11'
#elif __posix
      zterm = 'x11'
#else
      print*, 'unknown operating system'
#endif
      end program foo

#ifdef _WIN64更改为#if defined (_WIN64)没有任何帮助。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

这可能是GFortran PR 42954。由于GFortran开始使用libcpp而不是在单独的进程中运行cpp,因此缺少许多这些内置宏。

作为一种变通方法,您可以在构建过程中生成一个包含这些内置宏定义的文件,然后您可以将其包括在内。例如。有一个运行的制作目标

gcc -E -dM - < /dev/null > builtins.inc

那么你的资源应该依赖于Makefile中的builtins.inc,以及源文件的开头

#include "builtins.inc"