【发布时间】:2017-11-16 00:50:43
【问题描述】:
我发现这两个实现不相等:
1.num = sign ? (int)va_arg(args, int) : (unsigned int)va_arg(args, unsigned int);
2.if (sign)
num = (int)va_arg(args, int);
else
num = (unsigned int)va_arg(args, unsigned int);
第一个实现,无论符号是什么值,它总是选择假分支。
第二个按预期工作。
这里发生了什么?我正在使用 GCC/ARM GCC 64 位
【问题讨论】:
-
第一个不“始终选择假分支”,但条件的结果总是
unsigned int,即选择true分支,该值将是(unsigned int)(int)va_arg(args, int),这很可能等于你从错误分支中得到的结果 -
@Leslie Li 我认为你错了。问题是有符号整数和无符号整数的共同类型是无符号整数。
-
要改进问题,请说明您如何确定选择了错误分支
-
并且还要给出num的类型。这很重要。
-
是的,每个表达式在编译时都有它的类型(除了可变修改数组的数组大小);条件的结果也不例外
标签: c gcc conditional-operator