這裏是一個循環,通過C串向後推移:比較無符號的表達與0
size_t slen = strlen(string);
for (size_t i = slen-1; i >= 0; i--) {
/* do stuff */
}
當我編譯此代碼與gcc -Wall -Wextra -std=c99 -o code code.c
,收到這樣的警告:
警告:比較無符號表達式> = 0始終爲真[-Wtype-limits]
在處理此警告時,我將此循環替換爲:
for (int i = (int)slen-1; i >= 0; i--) {
哪些工作正常,但我想知道如果他們是一種方式來使第一個循環仍然編譯沒有上述警告?當我用-Wextra
進行編譯時,似乎只會觸發此警告。
爲什麼要讓第一次循環編譯時沒有警告?警告告訴你,這在邏輯上是不正確的。所以不知道你試圖通過試圖保持不正確的代碼來實現。 – kaylum
@ kaylum只是因爲好奇而好奇。在閱讀更多內容之後,我必須同意您的看法,即不正確的代碼。 – RoadRunner
編譯第一個循環有什麼意義?一個無符號變量總是'> = 0',所以爲什麼還要檢查? –