c++ - Fortran的参数语句和C/C++的#define语句类似吗?

标签 c++ c fortran

我是 Fortran 的新手,但在我看来 Fortran 的 parameter 类似于在 C/C++ 中使用 #define。它们相似吗?它们的使用方式相同吗?我知道 #define 是一个预处理器语句,我不确定这可能导致 #defineparameter 有什么异同。

最佳答案

正如其他答案中的许多细节所述,具有 parameter 属性的对象是一个命名常量。此属性可以在声明中指定,例如在 examples 中由 Alexander Vogt 给出或使用 parameter 语句。

如果预处理使用#define,如

#define int_literal 1

然后,正如其他地方所述,在预处理阶段进行文本级替换,因此我们得到了文字常量

现在,为什么这种区别很重要?也就是说,这两个片段之间有没有真正的区别

#define nx 100
real x(nx)

integer, parameter :: nx=100
real x(nx)

?

可能会想,不是很多。然而,考虑

integer, parameter :: hello(*) = [1,2,3]
type(some_type), parameter :: tp = some_type(4,5,6)

我们将努力寻找合适的 #define 来允许我们做任何我们想做的事,就好像我们有那些命名常量一样。使用这些命名常量,我们可以拥有类似的东西

print *, hello(2)-PRODUCT(hello(1::2)), tp%b   ! For b one of the components.

也就是说,命名常量是一种数据对象,可以用奇异的方式进行操作,远比文字文本替换所希望的要多。

对于真正的病理学,考虑这个愚蠢的例子

#define x 2.1
print *, 1/x

integer, parameter :: x=2.1
print *, 1/x 

为了完整起见,参数语句的一个例子是

integer i
parameter (i=1)

关于c++ - Fortran的参数语句和C/C++的#define语句类似吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34276099/

相关文章:

c++ - 面试问题中的这个位操作代码有什么问题?

c++ - 我正在使用命令提示符在 C++ 中做一个非常简单的应用程序

C - 从数组中删除数字,不会删除相同数字的多个实例,仅删除一个

python - 如何通过 f2py 将 pgfortran(具有 OpenAcc direvative )与 python 连接

c++ - std::equal_range 提示 "sequence not ordered"

C++ 默认初始化和值初始化 : which is which, 在何时以及如何可靠地初始化模板类型成员时调用

在 printf 之后调用 Opendir 时 C 程序崩溃

java - 打印 Sierpinski 三角形的程序

cmake - CMake 找不到 Fortran 模块文件

Fortran - 来自旧 (1972) 代码的两分支 IF 语句