为什么使用 -E 标志和 -cpp? (gfortran 预处理选项)

For what is it used -E flag with -cpp? (gfortran preprocessing options)

我正在使用以下选项:

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

因为我使用 'touch' 文件是空的。

-E 标志在 the manual 中有描述。

If you use the -E option, nothing is done except preprocessing. Some of these options make sense only together with -E because they cause the preprocessor output to be unsuitable for actual compilation.

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

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