1

我实际上在 Fortran 中从事一个科学项目,所使用的函数集分为 64 位和 32 位版本。此外,一些变量在两种不同的体系结构中为相同的功能定义了不同的属性。例如,在 32 位中,变量是 INTEGER*4,而在 64 位中,变量是 INTEGER*8。

现在,我看到在 C++ 中,可以在文件开头使用 #ifndef 来检查这一点,就像在这篇文章中解释的那样。Fortran 中有什么可用的吗?您会建议我哪些可能的解决方案?

请记住,该项目应在具有多种架构的 Windows 和 Linux 上运行。但仍有任何建议将不胜感激!

编辑:要回复一些评论,假设您想使用 MKL 库的一部分 PARDISO 求解器。我们可以调用两个子例程:pardiso 和 pardiso_64。Pardiso 需要一个变量,在手册(第 6 页,此处)中称为 PT,它允许 pardiso 处理数据。在 32 位版本中,它是 INTEGER*4,而在 64 位版本中,它是 INTEGER*8。基本上,我不想为两者分配内存,然后使用 IF 语句选择正确的变量。

我现在想象预处理可以完成这项工作,但即使我在 Fortran 中工作,它也必须是 C 预处理器吗?例如,英特尔 Fortran 会像 gcc/gfortran 那样调用 C 预处理器吗?

4

1 回答 1

0

您可以使用 Fortran 内部函数(例如范围)测试变量的属性。无需为此使用预处理器指令。作为语言的一部分,内在函数将是标准的和可移植的。

正如已经回答的那样,大多数 Fortran 编译器确实支持预处理器指令。

于 2013-01-04T17:18:53.317 回答