这里是一个循环,通过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',所以为什么还要检查? –