Dee*_*ner 2 c operator-precedence
我已经写了一个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));
}
Run Code Online (Sandbox Code Playgroud)
您没有传递两个参数-将会是reverse(i++, i)(由于(i++和i)之间缺少序列点,偶然会调用未定义的行为。
您只是(i++, i)作为一个参数传递。由于它在另一对括号内,因此这里的逗号不会分隔函数的参数,而是充当逗号运算符。
(i++, i)似乎要执行i++,然后求值到i的最后一个操作数,。您可以在这里看到:
// Notice the ( , )
int i = (puts("Inside\n"), 2); // Prints "Inside"
printf("%d\n", i); // Prints 2
Run Code Online (Sandbox Code Playgroud)
它没有引起错误,因为您仅传递了一个参数。不过,那一个论点是一系列影响的评估结果i。