如何在编译时使用fortran检测架构?

时间:2013-01-04 16:16:47

标签: compilation 64-bit fortran 32-bit cpu-architecture

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

现在,我在C ++中看到可以使用文件开头的#ifndef来检查它,就像在this post中解释的那样。 Fortran有什么东西可用吗?你会建议我使用哪种解决方案?

请记住,该项目应该在Windows和Linux上运行,具有多种架构。但仍有任何建议值得赞赏!

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

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

1 个答案:

答案 0 :(得分:0)

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

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