【发布时间】:2012-05-15 20:09:11
【问题描述】:
我正在尝试将一些 C++ 代码集成到 Fortran 中。 我对类型之间的等价性有疑问,
Fortran integer*1 是否等效于 C++ bool?¿ 如果不是,正确的 C++ 等效类型是什么?¿
非常感谢您!
【问题讨论】:
标签: c++ integration fortran
我正在尝试将一些 C++ 代码集成到 Fortran 中。 我对类型之间的等价性有疑问,
Fortran integer*1 是否等效于 C++ bool?¿ 如果不是,正确的 C++ 等效类型是什么?¿
非常感谢您!
【问题讨论】:
标签: c++ integration fortran
引用this link:
INTEGER(1) 类型应该用于内存在的大型数组 对于只有正数、负数和负数的变量的溢价 -129 到 127 范围内的零整数值..
所以,我会说它的C/C++ 等效项是signed char。 bool 的等价物是 Fortran 的 logical 类型。
编辑:MSB 的回答比我的要好得多;你最好按照他的建议去做。
【讨论】:
int8_t,因为可能存在具有多字节char-s 的系统。
最好的办法是使用提供与 C 类型匹配的类型的 Fortran ISO_C_Binding。该方法与编译器和平台无关。我对 C++ 类型不太确定,但如果你确定它们的 C 等价物你应该很好。 ISO_C_Binding 提供 Fortran 类型 C_BOOL 以匹配 C 类型 _Bool。该绑定提供了一长串等效类型。该列表出现在 gfortran 手册的“内在模块”一章中。另请参阅“混合语言编程”一章。虽然我引用了 gfortran 手册,但作为 Fortran 2003 语言标准的一部分,这些功能并非特定于该编译器。
附:一条评论建议使用 int8_t。在 Fortran 端与 ISO C 绑定的匹配类型是 C_INT8_T。
【讨论】: