是否可以在 c 中传递两个参数?
Is it possible to pass two arguments in c?
我编写了一个 C 程序,其中我声明了一个函数 reverse(int i)
。当我编译并 运行 程序时,它 运行 没问题,尽管传递了两个像这样 reverse((i++, i))
的参数。为什么这不会导致语法错误? reverse
需要一个参数。
#include <stdio.h>
void reverse(int i);
int main()
{
reverse(1);
}
void reverse(int i)
{
if (i > 5)
return ;
printf("%d ", i);
return reverse((i++, i));
}
(i++, i)
似乎执行 i++
,然后评估为 i
,最后一个操作数为 ,
。你可以在这里看到:
// Notice the ( , )
int i = (puts("Inside\n"), 2); // Prints "Inside"
printf("%d\n", i); // Prints 2
它没有导致错误,因为你只传递了一个参数。不过,那个论点是一系列效果,评估结果为 i
。
您没有传递两个参数 - 那将是 reverse(i++, i)
(由于 (i++
和 i
之间缺少序列点,这会顺便调用未定义的行为) .
您将 (i++, i)
作为单个参数传递。由于它在额外的一对括号内,因此此处的逗号不会分隔函数的参数,而是充当逗号运算符。
我编写了一个 C 程序,其中我声明了一个函数 reverse(int i)
。当我编译并 运行 程序时,它 运行 没问题,尽管传递了两个像这样 reverse((i++, i))
的参数。为什么这不会导致语法错误? reverse
需要一个参数。
#include <stdio.h>
void reverse(int i);
int main()
{
reverse(1);
}
void reverse(int i)
{
if (i > 5)
return ;
printf("%d ", i);
return reverse((i++, i));
}
(i++, i)
似乎执行 i++
,然后评估为 i
,最后一个操作数为 ,
。你可以在这里看到:
// Notice the ( , )
int i = (puts("Inside\n"), 2); // Prints "Inside"
printf("%d\n", i); // Prints 2
它没有导致错误,因为你只传递了一个参数。不过,那个论点是一系列效果,评估结果为 i
。
您没有传递两个参数 - 那将是 reverse(i++, i)
(由于 (i++
和 i
之间缺少序列点,这会顺便调用未定义的行为) .
您将 (i++, i)
作为单个参数传递。由于它在额外的一对括号内,因此此处的逗号不会分隔函数的参数,而是充当逗号运算符。