gpt4 book ai didi

gcc - Fortran #define 多行宏定义

转载 作者:行者123 更新时间:2023-12-02 01:43:04 25 4
gpt4 key购买 nike

我的印象是 C 风格的宏定义在 gfortran 中工作?

#define ERROR_CHECKER(msg,stat) \
IF (stat.NE.0) THEN \
DO i = 1,BIG \
IF(msg(i).NE.C_NULL_CHAR)THEN \
ErrMsg(i:i) = msg(i) \
ELSE \
EXIT \
END IF \
END DO\
IF(stat.EQ.1) THEN \
ErrStat = ID_Warn \
ELSE \
ErrStat = ID_Fatal \
RETURN \
END IF \
END IF

但是这个错误毁了我的一天:

IF (stat.NE.0) THEN      DO i = 1,BIG         IF(message
1
Error: Cannot assign to a named constant at (1)

知道我在这里做错了什么吗?

次要问题:intel fortran 是否识别 c 风格的宏?如果是这样,是否需要编译器标志?

最佳答案

不使用宏,只需将宏转换为函数即可。这样,您就不会严重依赖具有宏功能的 Fortran 编译器

LOGICAL FUNCTION ERROR_CHECKER(msg,stat)
character*(*) msg(*)
integer stat
IF (stat.NE.0) THEN
DO i = 1,BIG
IF(msg(i).NE.C_NULL_CHAR)THEN
ErrMsg(i:i) = msg(i)
ELSE
EXIT
END IF
END DO
IF(stat.EQ.1) THEN
ErrStat = ID_Warn
ELSE
ErrStat = ID_Fatal
RETURN .FALSE.
END IF
END IF
RETURN .TRUE.
END FUNCTION

在你的代码中

IF (ERROR_CHECKER(msg, stat)) RETURN

编辑:某些较新版本的 Fortran 具有可以使用的语句分隔符 (;)。不幸的是,行的长度是有限的,所以你的宏不能很长,也不能包含一个以上的控制结构。

关于gcc - Fortran #define 多行宏定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27339631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com