当前位置:  开发笔记 > 编程语言 > 正文

Fortran的参数语句是否类似于C/C++的#define语句?

如何解决《Fortran的参数语句是否类似于C/C++的#define语句?》经验,为你挑选了2个好方法。

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



1> Severin Papp..:

parameter更类似于constC/C++中的声明.这是一个不变的表达.

要在Fortran中获取预处理器,您可以考虑在Fortran代码上使用.F扩展或强制C预处理器



2> francescalus..:

正如其他答案中的许多细节所述,具有该parameter属性的对象是命名常量.此属性可以在声明中指定,例如在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)

我们很难找到合适的#defines,它们允许我们做任何我们想要的事情,就好像我们有那些命名常量一样.对于那些命名常量,我们可以有类似的东西

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)

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有