使用fortran程序调用c子例程

时间:2015-07-30 23:40:03

标签: c fortran printf

我在从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程序

1 个答案:

答案 0 :(得分:3)

混合语言输入或输出到同一外部单元(〜文件)的行为取决于处理器 - 请参阅F2008 15.5.1p6。除此之外,这是为了适应在每种语言的运行时支持中缓冲(或完全不兼容)的可能性。由于行为取决于处理器,因此无法保证任何特定订单。

强大的解决方案是使用一种语言对该特定文件进行所有输入/输出,可能是通过提供另一种语言可以调用的过程/函数来进行输入/输出。