-E 标志和 -cpp 用于什么? gfortran 预处理选项

问题描述

我正在使用以下选项:

touch foo.f90; gfortran -cpp -E -dM foo.f90

,但是当我删除 -E 标志时,我收到此错误

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
collect2: error: ld returned 1 exit status

当我使用“触摸”时,文件是空的。

解决方法

the manual 中描述了 -E 标志。

如果使用 -E 选项,除了预处理之外什么都不做。一些 这些选项中的只有与 -E 一起使用才有意义,因为它们会导致 预处理器输出不适合实际编译。

它使编译器打印预处理过的源代码而不是编译它。这意味着由 C 预处理器 cpp 预处理。

如果您的源代码不是有效的 Fortran 程序,那么尝试实际编译它(没有 -E 标志)自然会导致某种错误消息。