2015-04-15 40 views

回答

1

recvfrom返回後,調用某些其他函數將errno設置爲零的情況。這非常容易做到。爲了安全起見,在recvfrom返回後立即將errno複製到其他變量立即

錯誤:

i = recvfrom (...); 
if (i < 0) 
{ 
    printf ("recvfrom error!\n"); 
    printf ("errno=%d\n", errno); 
} 

如果第一printf修改errno會發生什麼?

右:

i = recvfrom (...); 
if (i < 0) 
{ 
    int j = errno; 
    printf ("recvfrom error!\n"); 
    printf ("errno=%d\n", j); 
} 

的ANSI規範說,「[A],使用錯誤號錯誤檢查程序應該......隨後的庫函數調用之前檢查它。」

+0

好了,我快要撲了。但肯定它會更加重要的是顛倒'printf()'調用的順序,或者將它們組合起來? – EJP

1

從來沒有。這不應該發生。

相關問題