c中的论证评估

时间:2014-07-28 10:05:08

标签: c

 void main(){
     int i=10;
     int j=5;
     int k=0;

     k = MAN(i++,++j);
     printf("%d %d %d ", i, j, k);
 }

有人能解释一下如何评估答案吗? MAN是一个函数。我想知道如何评估参数的顺序。我得到答案为12 6 11。

1 个答案:

答案 0 :(得分:2)

请注意,操作员,序列点和评估顺序是相当基本的事情,所有这些都应该被您用来学习该语言的书籍或文档所涵盖。

postincrement运算符(变量名后面的++)将增加变量的值并计算前一个值。换句话说,如果i的值为10,则i++将评估为10,而i将具有11的新值}。

preincrement运算符(变量名前的++)将增加变量的值并计算新值。换句话说,如果j的值为5,那么++j将评估为6j,其新值为6

正如您所说,MAN()是代码中的函数,而不是类似函数的宏,那么您声明的12 6 11结果是不可能的,因为您从i=10开始,然后i++i提供11的值,因此当您将其传递给printf()时,根本无法从中获取12。因此,MAN()必须是类似函数的宏,它至少会对其中一个参数进行求值。

请提供您的代码正在使用的MAN()的实际定义。