可能重复:
confused about printf() that contains prefix and postfix operators.
我遇到了包含以下代码段的代码,
int main() {
int c = 100;
printf("\n %d \t %d \n", c, c++);
return 0;
}
我预计输出为100& 101但我输出
101 100
任何人都可以帮我解释原因吗?
答案 0 :(得分:9)
C和C ++标准不保证功能参数的评估顺序。大多数编译器将从右到左评估参数,因为这是使用cdecl调用约定将它们推送到堆栈的顺序。
答案 1 :(得分:5)
无法保证左侧的c
或右侧的c++
是否会先评估。
根据标准,功能参数的评估顺序为 Unspecifeid ,因此未定义行为。
根据 C ++标准的第1.9节 :
“抽象机器的某些其他方面和操作在本国际标准中描述为unspecified
(for example, order of evaluation of arguments to a function
)。在可能的情况下,本国际标准定义了一组允许的行为。定义抽象机器的非确定性方面。“
答案 2 :(得分:1)
如果您刚刚使用printf ("%d\n", c++)
或printf ("%d\n", c)
,则无论如何结果都是100。在一个函数调用中打印c和c ++就像未定义的行为。
答案 3 :(得分:-3)
printf从右到左工作,所以先执行c ++(c = 100)然后执行C ++并且C = 101 因此输出101和100 http://en.wikipedia.org/wiki/Printf