printf不';如果稍后在程序中调用msgrcv,则不会打印

printf不';如果稍后在程序中调用msgrcv,则不会打印,c,posix,C,Posix,printf在这种情况下从不打印…但是如果我没有msgrv调用,它会被打印。。这使得调试我的程序变得非常困难。有什么想法吗?试着在printf的末尾加一个换行符。我不太熟悉“为什么”,但它解决了我不久前遇到的一个类似问题。谁是temp?你在哪里声明变量?@James这可能是因为你的printf实现恰好在换行符上刷新。据我所知(所以不要把它当作事实),在调用printf时,你会写入一个缓冲区。当缓冲区已满或输入某些字符时,此缓冲区将打印到屏幕上。这可以通过仅在重要的时候打印来保持终端的流畅。std

printf在这种情况下从不打印…但是如果我没有msgrv调用,它会被打印。。这使得调试我的程序变得非常困难。有什么想法吗?

试着在printf的末尾加一个换行符。我不太熟悉“为什么”,但它解决了我不久前遇到的一个类似问题。

谁是
temp
?你在哪里声明变量?@James这可能是因为你的printf实现恰好在换行符上刷新。据我所知(所以不要把它当作事实),在调用printf时,你会写入一个缓冲区。当缓冲区已满或输入某些字符时,此缓冲区将打印到屏幕上。这可以通过仅在重要的时候打印来保持终端的流畅。
stdout
在写入交互设备时默认为行缓冲。如果不想添加换行符,还可以在
printf
之后添加调用
fflush(stdout)
,以强制刷新输出。
int main(int argc, char *argv[])
{
printf("Temp is");

msgrcv(externalQid, &incomingMsg, sizeof(incomingMsg)-sizeof(long), 0, 0);
}