下面给出的代码输出是否取决于编译器,或者保证所有编译器的输出都相同?
int main()
{
int i=5;
i=i/3;
printf("%d\n",i);
return 0;
}
答案 0 :(得分:1)
是的,您的示例的行为定义明确。
然而,在负值的情况下,它不太清楚。在C99之前,无论整数除法是向零舍入还是向负无穷大舍入,都留作实现定义:
如果任一操作数为负数,则是否为
/
运算符的结果是小于的最大整数 代数商或大于代数的最小整数 商是实现定义的
C99要求向零舍入:
当整数被分割时,
/
运算符的结果是任意的代数商 分数部分丢弃..
答案 1 :(得分:1)
The C99 standard,第6.5.5节,第6段:
当整数被分割时,/运算符的结果是 任何小数部分丢弃的代数商。如果 商a / b是可表示的,表达式(a / b)* b + a%b应为 等于a。
该标准还指出,这通常被称为“截断为零”。
是的,它定义明确。