2016-11-21 32 views
-1

glibc reference我們發現這樣一句話:爲什麼在glibc引用中測試int的符號稱爲「sloppy code」?

...草率代碼像

{ 
    int c; 
    ... 
    while ((c = getc (fp)) < 0) 
    ... 
} 

已被改寫......

爲什麼測試中的int的符號在glibc引用中稱爲「sloppy代碼」?

+0

它已經在下面(你的報價)解釋過了,即WEOF不需要討厭。 – usr

+1

只需仔細閱讀該代碼周圍的文本即可。這不是關於標誌的測試。它明確地將結果與'WEOF/EOF'進行比較。 'EOF'必須是負數,這是'getc()'返回的唯一負值。所以編寫'getc()<0'而不是'getc()!= EOF'是一種流行的壞習慣。這個習慣可以插入'wgetc()',但是由於'WEOF'不需要是負數,像'wgetc()<0'這樣的代碼可能無法按預期工作。 – Sergio

+0

@Sergio:這個關於'WEOF'和'EOF'的說法是嚴格正確的,但是它會故意誤導定義的'WEOF'做一些與'EOF'不同的事情,並且這兩者都不同於'-1'。 – chqrlie

回答

2

這與宏的使用WEOF有關。正如reference已經提到,(重點煤礦

WEOF不一定是相同的值,EOF不像EOF還需要爲負。 [...]

所以,檢查< 0可能是一個錯誤的決定,嚴格來說,它應該反對WEOF本身的返回值進行檢查。

+0

@IgorLiferenko它不嚴格地關於'WEOF',這是一個通用的問題,這裏使用的例子是'WEOF',這是您對_sloppy_部分的關注。 –

相關問題