【发布时间】:2015-04-13 23:31:10
【问题描述】:
我有一些包含以下行的 Fortran 代码:
IF((IFIX(X).AND.6).NE.0)
THEN
X 的值是使用 NAMELIST 和 READ 语句指定的:
NAMELIST/XYZ/ ….,X,……
.
.
.
READ(5,XYZ)
变量 X 可以取以下值:
0.0
1.0
2.0
3.0
4.0
6.0
尝试使用 GCC Fortran (gfortran) 编译此程序(文件名 abcd.f),因此:
$gfortran -o abcd abcd.f
产生以下错误:
IF((IFIX(X).AND.6).NE.0)
1
Error: Operands of logical operator '.and.' at (1) are INTEGER(4)/INTEGER(4)
我对 LOGICAL 变量和运算符的理解是,数值 0 转换为 FALSE,非零值转换为 TRUE。如果 .AND 的两个值。比较为 TRUE,则结果为 TRUE,否则结果为 FALSE。
因此,我想出了下面的值表:
X IFIX(X) IFIX(X).AND.6 (IFIX(X).AND.6).NE.0) result
0.0 0 -> FALSE FALSE -> =0 FALSE exit IF without executing THEN
1.0 1 -> TRUE TRUE -> ≠0 TRUE execute THEN
2.0 2 -> TRUE TRUE -> ≠0 TRUE execute THEN
3.0 3 -> TRUE TRUE -> ≠0 TRUE execute THEN
4.0 4 -> TRUE TRUE -> ≠0 TRUE execute THEN
6.0 6 -> TRUE TRUE -> ≠0 TRUE execute THEN
因此,我认为逻辑没有任何错误(撇开这是否是实现预期结果的最佳方式的问题不谈 - 我正在处理我希望对其进行最少更改的遗留代码)。
谁能解释为什么我会收到此错误消息?
【问题讨论】: