【发布时间】:2018-09-02 14:55:11
【问题描述】:
下面的代码sn-ps虽然大同小异,但给出的答案不同
#include <stdio.h>
int main() {
signed char c = -128;
c = -c;
printf("%d", c);. //-128
return 0;
}
还有:
#include <stdio.h>
int main() {
signed char c = -128;
printf("%d", -c);. //expected -128 but got 128
return 0;
}
printf 可以进行内部类型转换吗?
【问题讨论】:
-
在后一种情况下,-c 被提升为
int。 -
这可能是 C 未定义的行为。
-
只是为了补充@YiFei的评论:
c = -c;与c = (signed char)(-(int)c);相同,printf("%d\n", -c);与printf("%d\n", -(int)c);相同 -
如果你启用了所有推荐的警告,你的编译器就会清楚这一点。注意:在询问之前建议启用和修复警告..