GNU Fortran / 预处理器问题与宏和双正斜杠

GNU Fortran / Preprocessor issue with macros and double forward slash

我最近将我的 gnu 编译器从 4.8.4(在 Ubuntu 14.04)升级到 5.4(Ubuntu 16.04),现在我使用的一个包不再编译。它适用于 gnu 4.8.4。

首先,编译在我的 makefile 中的这一行停止:

cpp -std=c89 -C $(FLAGS) $(PARSER_INC) $(COMMON)/struct_parser.F90 > $(PARSER_NAME).F90

错误是:

../common/struct_parser.F90:53:31: error: C++ style comments are not allowed in ISO C90
    c_filename = trim(filename)//C_NULL_CHAR

似乎问题是 cpp 是用 -std=c89 调用的,它有双正斜杠的问题(尽管这是一个 fortran 连接,不是 C 代码的一部分)。 克服此错误的最佳方法是什么?如果我删除 -std=c89 则编译会继续进行,但我不认为这是一个好的解决方案。 如果我确实删除了 std 行,那么我的 makefile 中的下一行会产生一整套错误:

$(F90) -o $@ -c -nocpp $(FFLAGS) $(INC) -I$(COMMON)/obj $(AUXFLAGS) $(PARSER_NAME).F90

所有错误都是这样,只是针对F90文件的不同行:

count = count + print_bool_scalar(ptr, max(0, length - count), XSTR(COMMON_FILE_FLAGS_T_VARIABLE)//'%'//XSTR(do_cloud)//C_NULL_CHAR, COMMON_FILE_FLAGS_T_VARIABLE%do_cloud)
                                                                                                                                                                    1
Error: Symbol ‘common_file_flags_t_variable’ at (1) has no IMPLICIT type
/media/data/Software/ORAC/trunk/obj/read_ctrl.f_pri.inc:4:172:

相关环境变量:

F90 = gfortran
FFLAGS=-O3 -g -cpp -ffree-line-length-0 -fopenmp

知道那里发生了什么吗?我认为它与我在使用 cpp 时遇到的第一个错误有关。顺便定义了'XSTR'宏

不要直接通过cpp使用预处理器。它是 C 预处理器,而不是 Fortran 预处理器。它不能正确处理 Fortran(即 //)。

为了与 Fortran 兼容,必须在 traditional-mode 中调用 cpp,gfortran 会自动为您调用。只需对 .F.F90 文件执行 gfortran -cpp 甚至 gfortran

如果你使用像可变宏这样的高级宏,你可能就不走运了,这里的提问者 最终坚持使用旧的 GCC 版本。