【发布时间】:2017-03-07 03:53:23
【问题描述】:
#include<stdio.h>
#include<string.h>
void printlength(char *s, char *t) {
unsigned int c=0;
int len = ((strlen(s) - strlen(t)) > c) ? strlen(s) : strlen(t);
printf("%d\n", len);
}
void main() {
char *x = "abc";
char *y = "defgh";
printlength(x,y);
}
当我编译它时,它给出了 3,但是,我不明白这里的转换是如何发生的:(strlen(s) - strlen(t)) > c )
【问题讨论】:
-
这是非常糟糕的代码
(strlen(s) - strlen(t))总是 >= 0,因为它是无符号数学。 -
所以优化器可以翻译成
printf("%d\n", (int)strlen(s) ); -
@M.M 除非字符串长度相同,否则
printf("%d\n", (int)strlen(t) ); -
@chux 如果它们的长度相同,那么
strlen(t)可以替换为strlen(s) -
@M.M 是的!在这一点上,您的优化编译器大脑超过了我的。