<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic fflush works. in Intel® Fortran Compiler</title>
    <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Waiting-on-C-function-to-return-before-proceeding/m-p/1151728#M140283</link>
    <description>&lt;PRE class="brush:cpp; class-name:dark;"&gt;//fflush works.

#include &amp;lt;cstdio&amp;gt;
extern "C" int CPP_Library_Function(void* sendbuf, int sendcount, int *recvcounts) {
	for (int i = 0; i &amp;lt; sendcount; i++) {
		if (i &amp;gt; 0 &amp;amp;&amp;amp; i % 4 == 0)printf("\n");
		printf("  send(%02d)=%e  ", i, *((float*)(sendbuf)+i));
	}
	fflush(stdout);
	return 0x11;
};&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 28 Aug 2019 05:35:00 GMT</pubDate>
    <dc:creator>MWind2</dc:creator>
    <dc:date>2019-08-28T05:35:00Z</dc:date>
    <item>
      <title>Waiting on C function to return before proceeding</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Waiting-on-C-function-to-return-before-proceeding/m-p/1151726#M140281</link>
      <description>&lt;P&gt;I noticed a 'Hello World' at end of programming when debugging or exe on command line, but when used with redirect to file as in ftn_c.exe &amp;gt;ftn_c.txt, it appears before c function printf. (Or is this an OS(W10) "feature"?)&lt;/P&gt;&lt;P&gt;How do I make it wait for C function to return before proceeding?&lt;/P&gt;
&lt;PRE class="brush:fortran; class-name:dark;"&gt;!********************************
module ftn_C_2
   interface 
     integer (C_INT) function CPP_Library_Function &amp;amp; 
     (sendbuf, sendcount, recvcounts) &amp;amp; 
        BIND(C, name='CPP_Library_Function') 
        use, intrinsic :: ISO_C_BINDING  
        implicit none 
        type (C_PTR), value :: sendbuf 
        integer (C_INT), value :: sendcount 
        type (C_PTR), value :: recvcounts 
     end function CPP_Library_Function 
   end interface 
end module ftn_C_2
!  ftn_c.f90 
!
!  FUNCTIONS:
!  ftn_c - Entry point of console application.
!

!****************************************************************************
!
!  PROGRAM: ftn_c
!
!  PURPOSE:  Entry point for the console application.
!
!********************************************
program ftn_c
use, intrinsic :: ISO_C_BINDING, only: C_INT, C_FLOAT, C_LOC 
use ftn_C_2 
implicit none

! Variables
CHARACTER*1   CR 
CHARACTER*1   LF 
CHARACTER*1   NULL 
INTEGER :: CRET
real (C_FLOAT), target :: send(100) 
integer (C_INT) :: sendcount 
integer (C_INT), ALLOCATABLE, target :: recvcounts(:)
integer :: i
CR=CHAR(13) 
LF   = CHAR(10) 
NULL = CHAR(0) 
send(1)=1.0
do i=1,99
    send(1+i)=2.0*send(i)
end do

!
! Body of ftn_c
    ALLOCATE( recvcounts(100) ) 
!
    sendcount = 100
    CRET = CPP_Library_Function(C_LOC(send), sendcount, C_LOC(recvcounts)) 
!
    print *, CR // LF //'Hello World'
end program ftn_c&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;PRE class="brush:cpp; class-name:dark;"&gt;#include &amp;lt;cstdio&amp;gt;
extern "C" int CPP_Library_Function(void* sendbuf, int sendcount, int *recvcounts) {
	for (int i = 0; i &amp;lt; sendcount; i++) {
		if (i &amp;gt; 0 &amp;amp;&amp;amp; i % 4 == 0)printf("\n");
		printf("  send(%02d)=%e  ", i, *((float*)(sendbuf)+i));
	}
	return 0x11;
};&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ftn_c.exe &amp;gt; ftn_c.txt:&lt;/P&gt;
&lt;P&gt;Hello World&lt;BR /&gt;&amp;nbsp; send(00)=1.000000e+00 &amp;nbsp; &amp;nbsp;send(01)=2.000000e+00 &amp;nbsp; &amp;nbsp;send(02)=4.000000e+00 &amp;nbsp; &amp;nbsp;send(03)=8.000000e+00 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(04)=1.600000e+01 &amp;nbsp; &amp;nbsp;send(05)=3.200000e+01 &amp;nbsp; &amp;nbsp;send(06)=6.400000e+01 &amp;nbsp; &amp;nbsp;send(07)=1.280000e+02 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(08)=2.560000e+02 &amp;nbsp; &amp;nbsp;send(09)=5.120000e+02 &amp;nbsp; &amp;nbsp;send(10)=1.024000e+03 &amp;nbsp; &amp;nbsp;send(11)=2.048000e+03 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(12)=4.096000e+03 &amp;nbsp; &amp;nbsp;send(13)=8.192000e+03 &amp;nbsp; &amp;nbsp;send(14)=1.638400e+04 &amp;nbsp; &amp;nbsp;send(15)=3.276800e+04 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(16)=6.553600e+04 &amp;nbsp; &amp;nbsp;send(17)=1.310720e+05 &amp;nbsp; &amp;nbsp;send(18)=2.621440e+05 &amp;nbsp; &amp;nbsp;send(19)=5.242880e+05 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(20)=1.048576e+06 &amp;nbsp; &amp;nbsp;send(21)=2.097152e+06 &amp;nbsp; &amp;nbsp;send(22)=4.194304e+06 &amp;nbsp; &amp;nbsp;send(23)=8.388608e+06 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(24)=1.677722e+07 &amp;nbsp; &amp;nbsp;send(25)=3.355443e+07 &amp;nbsp; &amp;nbsp;send(26)=6.710886e+07 &amp;nbsp; &amp;nbsp;send(27)=1.342177e+08 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(28)=2.684355e+08 &amp;nbsp; &amp;nbsp;send(29)=5.368709e+08 &amp;nbsp; &amp;nbsp;send(30)=1.073742e+09 &amp;nbsp; &amp;nbsp;send(31)=2.147484e+09 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(32)=4.294967e+09 &amp;nbsp; &amp;nbsp;send(33)=8.589935e+09 &amp;nbsp; &amp;nbsp;send(34)=1.717987e+10 &amp;nbsp; &amp;nbsp;send(35)=3.435974e+10 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(36)=6.871948e+10 &amp;nbsp; &amp;nbsp;send(37)=1.374390e+11 &amp;nbsp; &amp;nbsp;send(38)=2.748779e+11 &amp;nbsp; &amp;nbsp;send(39)=5.497558e+11 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(40)=1.099512e+12 &amp;nbsp; &amp;nbsp;send(41)=2.199023e+12 &amp;nbsp; &amp;nbsp;send(42)=4.398047e+12 &amp;nbsp; &amp;nbsp;send(43)=8.796093e+12 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(44)=1.759219e+13 &amp;nbsp; &amp;nbsp;send(45)=3.518437e+13 &amp;nbsp; &amp;nbsp;send(46)=7.036874e+13 &amp;nbsp; &amp;nbsp;send(47)=1.407375e+14 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(48)=2.814750e+14 &amp;nbsp; &amp;nbsp;send(49)=5.629500e+14 &amp;nbsp; &amp;nbsp;send(50)=1.125900e+15 &amp;nbsp; &amp;nbsp;send(51)=2.251800e+15 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(52)=4.503600e+15 &amp;nbsp; &amp;nbsp;send(53)=9.007199e+15 &amp;nbsp; &amp;nbsp;send(54)=1.801440e+16 &amp;nbsp; &amp;nbsp;send(55)=3.602880e+16 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(56)=7.205759e+16 &amp;nbsp; &amp;nbsp;send(57)=1.441152e+17 &amp;nbsp; &amp;nbsp;send(58)=2.882304e+17 &amp;nbsp; &amp;nbsp;send(59)=5.764608e+17 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(60)=1.152922e+18 &amp;nbsp; &amp;nbsp;send(61)=2.305843e+18 &amp;nbsp; &amp;nbsp;send(62)=4.611686e+18 &amp;nbsp; &amp;nbsp;send(63)=9.223372e+18 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(64)=1.844674e+19 &amp;nbsp; &amp;nbsp;send(65)=3.689349e+19 &amp;nbsp; &amp;nbsp;send(66)=7.378698e+19 &amp;nbsp; &amp;nbsp;send(67)=1.475740e+20 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(68)=2.951479e+20 &amp;nbsp; &amp;nbsp;send(69)=5.902958e+20 &amp;nbsp; &amp;nbsp;send(70)=1.180592e+21 &amp;nbsp; &amp;nbsp;send(71)=2.361183e+21 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(72)=4.722366e+21 &amp;nbsp; &amp;nbsp;send(73)=9.444733e+21 &amp;nbsp; &amp;nbsp;send(74)=1.888947e+22 &amp;nbsp; &amp;nbsp;send(75)=3.777893e+22 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(76)=7.555786e+22 &amp;nbsp; &amp;nbsp;send(77)=1.511157e+23 &amp;nbsp; &amp;nbsp;send(78)=3.022315e+23 &amp;nbsp; &amp;nbsp;send(79)=6.044629e+23 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(80)=1.208926e+24 &amp;nbsp; &amp;nbsp;send(81)=2.417852e+24 &amp;nbsp; &amp;nbsp;send(82)=4.835703e+24 &amp;nbsp; &amp;nbsp;send(83)=9.671407e+24 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(84)=1.934281e+25 &amp;nbsp; &amp;nbsp;send(85)=3.868563e+25 &amp;nbsp; &amp;nbsp;send(86)=7.737125e+25 &amp;nbsp; &amp;nbsp;send(87)=1.547425e+26 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(88)=3.094850e+26 &amp;nbsp; &amp;nbsp;send(89)=6.189700e+26 &amp;nbsp; &amp;nbsp;send(90)=1.237940e+27 &amp;nbsp; &amp;nbsp;send(91)=2.475880e+27 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(92)=4.951760e+27 &amp;nbsp; &amp;nbsp;send(93)=9.903520e+27 &amp;nbsp; &amp;nbsp;send(94)=1.980704e+28 &amp;nbsp; &amp;nbsp;send(95)=3.961408e+28 &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; send(96)=7.922816e+28 &amp;nbsp; &amp;nbsp;send(97)=1.584563e+29 &amp;nbsp; &amp;nbsp;send(98)=3.169127e+29 &amp;nbsp; &amp;nbsp;send(99)=6.338253e+29&amp;nbsp; powershell&lt;BR /&gt;&lt;BR /&gt;debug console stepping through code or exe at cmd or powershell:&lt;/P&gt;
&lt;P&gt;PS C:\mw\c\vs2017\ftn_c\ftn_c\x64\Debug&amp;gt; .\ftn_c&lt;BR /&gt;&amp;nbsp; send(00)=1.000000e+00 &amp;nbsp; &amp;nbsp;send(01)=2.000000e+00 &amp;nbsp; &amp;nbsp;send(02)=4.000000e+00 &amp;nbsp; &amp;nbsp;send(03)=8.000000e+00&lt;BR /&gt;&amp;nbsp; send(04)=1.600000e+01 &amp;nbsp; &amp;nbsp;send(05)=3.200000e+01 &amp;nbsp; &amp;nbsp;send(06)=6.400000e+01 &amp;nbsp; &amp;nbsp;send(07)=1.280000e+02&lt;BR /&gt;&amp;nbsp; send(08)=2.560000e+02 &amp;nbsp; &amp;nbsp;send(09)=5.120000e+02 &amp;nbsp; &amp;nbsp;send(10)=1.024000e+03 &amp;nbsp; &amp;nbsp;send(11)=2.048000e+03&lt;BR /&gt;&amp;nbsp; send(12)=4.096000e+03 &amp;nbsp; &amp;nbsp;send(13)=8.192000e+03 &amp;nbsp; &amp;nbsp;send(14)=1.638400e+04 &amp;nbsp; &amp;nbsp;send(15)=3.276800e+04&lt;BR /&gt;&amp;nbsp; send(16)=6.553600e+04 &amp;nbsp; &amp;nbsp;send(17)=1.310720e+05 &amp;nbsp; &amp;nbsp;send(18)=2.621440e+05 &amp;nbsp; &amp;nbsp;send(19)=5.242880e+05&lt;BR /&gt;&amp;nbsp; send(20)=1.048576e+06 &amp;nbsp; &amp;nbsp;send(21)=2.097152e+06 &amp;nbsp; &amp;nbsp;send(22)=4.194304e+06 &amp;nbsp; &amp;nbsp;send(23)=8.388608e+06&lt;BR /&gt;&amp;nbsp; send(24)=1.677722e+07 &amp;nbsp; &amp;nbsp;send(25)=3.355443e+07 &amp;nbsp; &amp;nbsp;send(26)=6.710886e+07 &amp;nbsp; &amp;nbsp;send(27)=1.342177e+08&lt;BR /&gt;&amp;nbsp; send(28)=2.684355e+08 &amp;nbsp; &amp;nbsp;send(29)=5.368709e+08 &amp;nbsp; &amp;nbsp;send(30)=1.073742e+09 &amp;nbsp; &amp;nbsp;send(31)=2.147484e+09&lt;BR /&gt;&amp;nbsp; send(32)=4.294967e+09 &amp;nbsp; &amp;nbsp;send(33)=8.589935e+09 &amp;nbsp; &amp;nbsp;send(34)=1.717987e+10 &amp;nbsp; &amp;nbsp;send(35)=3.435974e+10&lt;BR /&gt;&amp;nbsp; send(36)=6.871948e+10 &amp;nbsp; &amp;nbsp;send(37)=1.374390e+11 &amp;nbsp; &amp;nbsp;send(38)=2.748779e+11 &amp;nbsp; &amp;nbsp;send(39)=5.497558e+11&lt;BR /&gt;&amp;nbsp; send(40)=1.099512e+12 &amp;nbsp; &amp;nbsp;send(41)=2.199023e+12 &amp;nbsp; &amp;nbsp;send(42)=4.398047e+12 &amp;nbsp; &amp;nbsp;send(43)=8.796093e+12&lt;BR /&gt;&amp;nbsp; send(44)=1.759219e+13 &amp;nbsp; &amp;nbsp;send(45)=3.518437e+13 &amp;nbsp; &amp;nbsp;send(46)=7.036874e+13 &amp;nbsp; &amp;nbsp;send(47)=1.407375e+14&lt;BR /&gt;&amp;nbsp; send(48)=2.814750e+14 &amp;nbsp; &amp;nbsp;send(49)=5.629500e+14 &amp;nbsp; &amp;nbsp;send(50)=1.125900e+15 &amp;nbsp; &amp;nbsp;send(51)=2.251800e+15&lt;BR /&gt;&amp;nbsp; send(52)=4.503600e+15 &amp;nbsp; &amp;nbsp;send(53)=9.007199e+15 &amp;nbsp; &amp;nbsp;send(54)=1.801440e+16 &amp;nbsp; &amp;nbsp;send(55)=3.602880e+16&lt;BR /&gt;&amp;nbsp; send(56)=7.205759e+16 &amp;nbsp; &amp;nbsp;send(57)=1.441152e+17 &amp;nbsp; &amp;nbsp;send(58)=2.882304e+17 &amp;nbsp; &amp;nbsp;send(59)=5.764608e+17&lt;BR /&gt;&amp;nbsp; send(60)=1.152922e+18 &amp;nbsp; &amp;nbsp;send(61)=2.305843e+18 &amp;nbsp; &amp;nbsp;send(62)=4.611686e+18 &amp;nbsp; &amp;nbsp;send(63)=9.223372e+18&lt;BR /&gt;&amp;nbsp; send(64)=1.844674e+19 &amp;nbsp; &amp;nbsp;send(65)=3.689349e+19 &amp;nbsp; &amp;nbsp;send(66)=7.378698e+19 &amp;nbsp; &amp;nbsp;send(67)=1.475740e+20&lt;BR /&gt;&amp;nbsp; send(68)=2.951479e+20 &amp;nbsp; &amp;nbsp;send(69)=5.902958e+20 &amp;nbsp; &amp;nbsp;send(70)=1.180592e+21 &amp;nbsp; &amp;nbsp;send(71)=2.361183e+21&lt;BR /&gt;&amp;nbsp; send(72)=4.722366e+21 &amp;nbsp; &amp;nbsp;send(73)=9.444733e+21 &amp;nbsp; &amp;nbsp;send(74)=1.888947e+22 &amp;nbsp; &amp;nbsp;send(75)=3.777893e+22&lt;BR /&gt;&amp;nbsp; send(76)=7.555786e+22 &amp;nbsp; &amp;nbsp;send(77)=1.511157e+23 &amp;nbsp; &amp;nbsp;send(78)=3.022315e+23 &amp;nbsp; &amp;nbsp;send(79)=6.044629e+23&lt;BR /&gt;&amp;nbsp; send(80)=1.208926e+24 &amp;nbsp; &amp;nbsp;send(81)=2.417852e+24 &amp;nbsp; &amp;nbsp;send(82)=4.835703e+24 &amp;nbsp; &amp;nbsp;send(83)=9.671407e+24&lt;BR /&gt;&amp;nbsp; send(84)=1.934281e+25 &amp;nbsp; &amp;nbsp;send(85)=3.868563e+25 &amp;nbsp; &amp;nbsp;send(86)=7.737125e+25 &amp;nbsp; &amp;nbsp;send(87)=1.547425e+26&lt;BR /&gt;&amp;nbsp; send(88)=3.094850e+26 &amp;nbsp; &amp;nbsp;send(89)=6.189700e+26 &amp;nbsp; &amp;nbsp;send(90)=1.237940e+27 &amp;nbsp; &amp;nbsp;send(91)=2.475880e+27&lt;BR /&gt;&amp;nbsp; send(92)=4.951760e+27 &amp;nbsp; &amp;nbsp;send(93)=9.903520e+27 &amp;nbsp; &amp;nbsp;send(94)=1.980704e+28 &amp;nbsp; &amp;nbsp;send(95)=3.961408e+28&lt;BR /&gt;&amp;nbsp; send(96)=7.922816e+28 &amp;nbsp; &amp;nbsp;send(97)=1.584563e+29 &amp;nbsp; &amp;nbsp;send(98)=3.169127e+29 &amp;nbsp; &amp;nbsp;send(99)=6.338253e+29&lt;BR /&gt;Hello World&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 28 Aug 2019 03:34:27 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Waiting-on-C-function-to-return-before-proceeding/m-p/1151726#M140281</guid>
      <dc:creator>MWind2</dc:creator>
      <dc:date>2019-08-28T03:34:27Z</dc:date>
    </item>
    <item>
      <title>The issue is more than likely</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Waiting-on-C-function-to-return-before-proceeding/m-p/1151727#M140282</link>
      <description>&lt;P&gt;The issue is more than likely due to separate buffering of the output stream from the C++ function to the Fortran output.&amp;nbsp; The function may have completed execution, but information written to the stream may be buffered and not be written to the physical device straight away, in the meantime the Fortran program writes its output, so you see an apparent ordering change.&amp;nbsp; Buffering of streams is the sort of thing that changes when a language runtime figures out it is writing to a file rather than the console.&lt;/P&gt;&lt;P&gt;Try using the fflush C++ (and C) library function to flush stdout prior to returning to Fortran.&lt;/P&gt;</description>
      <pubDate>Wed, 28 Aug 2019 05:27:01 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Waiting-on-C-function-to-return-before-proceeding/m-p/1151727#M140282</guid>
      <dc:creator>IanH</dc:creator>
      <dc:date>2019-08-28T05:27:01Z</dc:date>
    </item>
    <item>
      <title>fflush works.</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Waiting-on-C-function-to-return-before-proceeding/m-p/1151728#M140283</link>
      <description>&lt;PRE class="brush:cpp; class-name:dark;"&gt;//fflush works.

#include &amp;lt;cstdio&amp;gt;
extern "C" int CPP_Library_Function(void* sendbuf, int sendcount, int *recvcounts) {
	for (int i = 0; i &amp;lt; sendcount; i++) {
		if (i &amp;gt; 0 &amp;amp;&amp;amp; i % 4 == 0)printf("\n");
		printf("  send(%02d)=%e  ", i, *((float*)(sendbuf)+i));
	}
	fflush(stdout);
	return 0x11;
};&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 28 Aug 2019 05:35:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Waiting-on-C-function-to-return-before-proceeding/m-p/1151728#M140283</guid>
      <dc:creator>MWind2</dc:creator>
      <dc:date>2019-08-28T05:35:00Z</dc:date>
    </item>
  </channel>
</rss>

