gpt4 book ai didi

macos - 使用 gfortran 在宏中连接字符串

转载 作者:行者123 更新时间:2023-12-01 14:58:59 25 4
gpt4 key购买 nike

用于连接的 C 预处理器宏 ( ## ) 在使用 gfortran 的 Mac 上似乎不起作用。在其他系统上使用其他 Fortran 编译器是可行的,所以我正在寻找 gfortran 的解决方法。我必须使用 ##创建许多变量,所以我不能没有它们。

示例代码:

#define CONCAT(x,y) x##y
program main
integer, parameter:: CONCAT(ID,2) = 3
print*,"Hello", ID_2
end program main

在 MAC 上使用 gfortran 编译错误
gfortran m.F90 -o m
m.F90:5.23:
integer, parameter:: ID##2 = 3
1
Error: PARAMETER at (1) is missing an initializer

最佳答案

##不适用于 gfortran(任何操作系统,而不仅仅是 Mac),因为它在传统模式下运行 CPP。

根据 this thread the gfortran mailing list传统模式下正确的运算符是 x/**/y ,所以你必须区分不同的编译器:

#ifdef __GFORTRAN__
#define CONCAT(x,y) x/**/y
#else
#define CONCAT(x,y) x ## y
#endif

其他人( http://c-faq.com/cpp/oldpaste.html )使用这种形式,当宏传递给 CONCAT 时表现更好(通过 Concatenating an expanded macro and a word using the Fortran preprocessor ):
#ifdef __GFORTRAN__
#define PASTE(a) a
#define CONCAT(a,b) PASTE(a)b
#else
#define PASTE(a) a ## b
#define CONCAT(a,b) PASTE(a,b)
#endif

间接公式有助于在连接字符串之前扩展传递的宏(之后为时已晚)。

关于macos - 使用 gfortran 在宏中连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39679689/

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