下面的函数调用语句中fanc函数的实参个数是:()
fanc(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8)));
求详细解答,详细分析,谢谢!
------解决方案--------------------
3个吧,逗号运算符啊.
#include <stdio.h>
#include <stdlib.h>
void func(int a, int b)
{
printf("a=%d b=%d\n", a, b);
}
int main(int argc, char *const argv[])
{
func((1, 2), (3, 4));
return 0;
}
------解决方案--------------------
完全取决于func、f2还有max到底是宏还是函数... 如果都是函数应该是7个
v1
v2
f2(v1,v2)
(v3,v4,v5)
v7
v8
(v6, max(v7, v8))
5个可能是max被视为宏了,会少两个
------解决方案--------------------
跟宏有很大关系
#include <stdio.h>
#include <stdlib.h>
#define f1(a,b) a,b
void fub(int c,int d,int a, int b,int e)
{
printf("a=%d b=%d\n", a, b);
printf("c=%d d=%d\n", c, d);
}
int main(int argc, char *const argv[])
{
fub(f1(3,4),(1,3),(3,4),(1,2,3,4,7));
while(1);
return 0;
}
------解决方案--------------------
题目中说是func函数的参数,我认为就是3个:
1、v1,v2属于函数f的形参,其返回值做为函数func的第一个形参;
2、(v3,v4,v5)是一个逗号运算符组成的表达式,值为最右边的v5,v5做为函数func的第2个形参;
3、(v6,max(v7,v8)).v7,v8属于max的函数,其返回值与v6又组成了一个逗号表达式,值为函数max的返回值,该值做为函数func的第3个形参。
综合以上分析,函数func的形参个数为3.在发生调用时,实参与形参在个数、类型、顺序上必须一致,所以我认为函数func的实参个数为3.
补充:
以func(f(v1,v2),(v3,v4,v5),(v6,max(v7,v8)))形式调用函数func时,外层括号里的f(v1,v2),(v3,v4,v5),(v6,max(v7,v8))都属于表达式,在发生调用时,这些表达式的值都会被计算出,其形式就如同func(v1,v2,v3).