我正在做一个项目,我必须在 C 中使用 Fortran 库。在 Fortran 库中,有一个包含复杂 *16、4x4 数组的公共块。现在在 C 中,复变量只是一个包含两个元素的结构,由于它是复数 *16,因此元素应该是 long double,这是 Fortran 中对应的 C 数据类型。所以我有一个带有两个长双打的结构。
我要访问这个数组的元素。好消息是,我已经可以与库的所有其他常见变量一起执行此操作。问题是我从数组中导入的元素是,
1) 没有按应有的顺序排列,“即使在考虑到 C 和 Fotran 的数组结构的差异之后”。
2)虽然大多数元素是正确的,但有两个与它们应该是完全不同的。
3)只有当我使用双而不是长双时,我才能得到正确的元素(除了两个)。当我使用 long double (和正确的字符转换)时,我得到了完全不同的东西,这清楚地表明了转换的问题。
我已经用尽了所有的解释,但没有任何效果。我在 C 中打印数组的代码如下:
for (j=0;j<=3;j++){
printf("%s", "\n");
for(k=0;k<=3;k++){
printf("%s %d %s %d %s %s %LE %s %LE %s",
"(", k+1, "," ,j+1, ")", "{",
(long double)mssmmixing_.neunmx[k][j].dr,
" ",
(long double)mssmmixing_.neunmx[k][j].di,
"}\n");
}
}
附加信息:因为我必须混合 Fortran 对象文件,所以我使用 gfortran 来编译 C 文件。如果我改用 GNU C 编译器,它会抛出关于无法识别 gfortran 例程的错误。这也可能是问题的根源,可能是 gfortran 无法识别 C 中的长双精度数。
任何帮助都会很有用。