C是否允许函数调用作为参数?

时间:2015-06-11 18:55:48

标签: c

例如,

atoi(reverse(itoa(p)))

Python允许这个,它是一个有趣的功能,但我想知道C是否也允许它。

3 个答案:

答案 0 :(得分:2)

是。函数调用的参数都可以是任意表达式,包括函数调用。

一般来说,很少有编程语言不支持这种语言。那些没有的通常被认为是玩具语言,不适合任何严肃的用途。 :)

答案 1 :(得分:1)

函数参数可以是任何有效的表达式。 reverse(itoa(p))是一个表达式,可以用作函数参数。

C11:3.3

1 参数

  逗号分隔列表中的

表达式,由函数调用表达式中的括号限定,[...]

请注意,函数本身就是一个表达式。

答案 2 :(得分:1)

这取决于“函数调用作为参数”的含义。 C语言没有提供任何内置的方法来支持延迟评估(如果你的问题是关于那个)。你的

atoi(reverse(itoa(p)))

表达式在C中有效,但它只代表

tmp1 = itoa(p);
tmp2 = reverse(tmp1);
result = atoi(tmp2);

即。它只是意味着每个“嵌套”函数都被称为“早期”,其结果作为输入参数传递给嵌套序列中的下一个函数。

你可以在C语言中获得对延迟评估的内置支持的壁橱是?:运算符,它可以在宏中使用(从而保留其“懒惰”性质)。