【发布时间】:2014-09-11 14:11:13
【问题描述】:
我正在尝试在 Fortran 中模拟 C 断言,以强制执行我所有过程的前置条件和后置条件。通过这种方式,我可以为用户提供更多关于运行时错误的详细信息,而不是我可以合理预期的维护。
为了实现这一点,我使用了预处理器指令 __FILE__ 和 __LINE__,并定义了一个扩展为 Fortran 子例程调用的 assert 宏。我没有尝试在这里描述它,而是创建了一个git repo,其中包含一些示例代码。如果你用
make test
./test
函数挂起,因为您调用了一个函数,该函数需要一个正参数和一个负参数。但是,如果您使用
make test DEBUG=1
./test
错误被断言捕获。
这适用于 gfortran 和英特尔 Fortran 编译器。我无权访问其他 Fortran 编译器。如果文件扩展名是.F90,我可以合理地期望其他编译器进行必要的源预处理吗?还是我应该依赖-cpp 标志?最便携的方法是什么?我什至应该这样做吗?
【问题讨论】:
-
我要补充一点,如果 CPP 预处理器未集成在某些 Fortran 编译器中,您可以直接使用它。它包含在所有 C 编译器中,在每个系统上都可用。
-
使用任何 C 预处理器都必须小心,因为他们习惯于去掉他们认为是 cmets 的内容。因为
//是一个有效的 C 或 C++ 注释,对于任何带有字符连接的 Fortran 代码或特定的常见或格式语句,它可能会产生令人惊讶的结果。
标签: fortran preprocessor