MRE:
{-# LANGUAGE ForeignFunctionInterface #-}
import GHC.Ptr
import Foreign
import Foreign.C
import Control.Monad
foreign import ccall unsafe "fibonacci.c fib" c_fib :: Int -> Int
example :: IO ()
example =
print (c_fib 5)
main = example
斐波那契.c
int fib(const int n) {
if (n == 1) {
printf("here");
return 1;
}
else {
return n*fib(n-1);
}
}
结果:
120 // does not print "here"
发生什么事了?
发生这种情况是因为 stdout 是行缓冲的并且
printf("here")
不会刷新缓冲区。
您可以通过打印新行(
printf("here\n")
)或明确地刷新它。
printf("here");
fflush(stdout);