我在从fortran子例程调用C子例程时在控制台上显示值时遇到问题。我在调用C子例程之前和之后都有打印语句,以及C子例程中的print语句。但是,在执行程序时,C语句将在两个Fortran语句之前打印,而不是在它们之间打印。我已经彻底查看了代码,并且在其他地方没有调用C子例程,因此没有明显的理由为什么应该在Fortran语句之前打印c语句。我创建了一个更简单的Fortran-C程序(下面)来尝试重现问题,但代码按预期的顺序执行了print语句。我想知道是否有人对可能出现的问题有任何见解。谢谢。
示例Fortran代码:
program test
print *, 'Calling C program'
call cprog()
print *, 'Finished calling C program.'
end program test
从fortran调用的示例c代码:
void cprog()
{
printf("THIS IS A TEST\n");
return;
}
输出:
调用C程序
这是一项测试
完成了调用C程序。
输出类似于我遇到的更复杂的代码:
这是一项测试
调用C程序
完成调用C程序
答案 0 :(得分:3)
混合语言输入或输出到同一外部单元(〜文件)的行为取决于处理器 - 请参阅F2008 15.5.1p6。除此之外,这是为了适应在每种语言的运行时支持中缓冲(或完全不兼容)的可能性。由于行为取决于处理器,因此无法保证任何特定订单。
强大的解决方案是使用一种语言对该特定文件进行所有输入/输出,可能是通过提供另一种语言可以调用的过程/函数来进行输入/输出。