c - 这两个陈述是等价的吗?
问题描述
声明 1
return (x1 > x2) ? ((x1 > x3) ? x1: x3): ((x2 > x3) ? x2: x3);
声明 2
if(x1>x2){
if(x1>x3){
return x1;
}
else{
return x3;
}
}
else if(x2>x3){
return x2;
}
else return x3;
解决方案
这两个陈述是等价的吗?
使用变体类型:可能没有。
示例:a ? b : c
原因b
和c
转换为常见类型,但不是这样if then else
。
#include<stdio.h>
double foo(int x1, float x2, int x3) {
// Inexact conversions to float vv vv
return (x1 > x2) ? ((x1 > x3) ? x1 : x3) : ((x2 > x3) ? x2 : x3);
}
double bar(int x1, float x2, int x3) {
if (x1 > x2) {
if (x1 > x3) {
return x1;
} else {
return x3;
}
} else if (x2 > x3) {
return x2;
} else
return x3;
}
int main(void) {
printf("%f\n", foo(INT_MAX, 1.0f, 0));
printf("%f\n", bar(INT_MAX, 1.0f, 0));
}
输出
2147483648.000000
2147483647.000000
或者在这两种方法下都可能出现编译器错误。
double foo2(int x1, float x2, int *x3) {
// error: invalid operands to binary > (have 'float' and 'int *')
return (x1 > x2) ? ((x1 > x3) ? x1 : x3) : ((x2 > x3) ? x2 : x3);
}
推荐阅读
- c++ - 任何人都可以帮助在以下快速排序代码中找到错误,它显示分段错误(SIGSEGV)
- excel - 打开具有特定扩展名的文件
- linux - 有人在 Raspberry pi 3(ARM) 上正确安装了 aws-cli v2(x86_64; zipped) 吗?
- javascript - 如何以角度将字符串解析为特定模式?
- jenkins - 无法在舞台内跳过舞台
- r - R代码逐个打开文件执行操作并关闭打开的文件
- python - 如何使用python中的正则表达式删除列表中的重复行
- c++ - 在半透明窗口下查找像素的颜色
- typescript - 打字稿推断类型而不使用显式类型变量进行回调
- swift - swift - 如何确保最初定义特定属性的协议或类型?