C 同时实例化函数和变量初始化

C 同时实例化函数和变量初始化,c,C,为什么下面的代码没有被编译?为了简洁起见,我希望代码以这种方式编写,这在语法上似乎还可以,但Linux gcc编译器会抱怨 #include <stdio.h> void fn(int in, char ch, char* str); int main() { fn(int i2 = 20, char ch2 = 'Z', char* str2 = "Hello"); printf("in2 = %d, ch2 = %c, str2 = %s\n", in2, c

为什么下面的代码没有被编译?为了简洁起见,我希望代码以这种方式编写,这在语法上似乎还可以,但Linux gcc编译器会抱怨

#include <stdio.h>
void fn(int in, char ch, char* str);
int main()
{
     fn(int i2 = 20, char ch2 = 'Z', char* str2 = "Hello");
     printf("in2 = %d, ch2 = %c, str2 = %s\n", in2, ch2, str2);
     return;
}

void fn(int in, char ch, char* str)
{
    printf("int = %d\n", in);
    printf("ch = %c\n", ch);
    printf("str = %s\n", str);
    return;
}
#包括
void fn(int-in,char-ch,char*str);
int main()
{
fn(int i2=20,char ch2='Z',char*str2=“Hello”);
printf(“in2=%d,ch2=%c,str2=%s\n”,in2,ch2,str2);
返回;
}
void fn(int-in、char-ch、char*str)
{
printf(“int=%d\n”,in);
printf(“ch=%c\n”,ch);
printf(“str=%s\n”,str);
返回;
}
因为在c89(ANSI C)中,只能在块的开头声明变量

int main()
{
    int i2 = 20; char ch2 = 'Z'; char* str2 = "Hello";
    fn(i2, ch2,str2);
    printf("in2 = %d, ch2 = %c, str2 = %s\n", in2, ch2, str2);
    return;
}
编辑


在c99中,即使您可以在其他部分使用,也不能在表达式中使用变量(如函数调用)。

您应该在函数调用之外声明变量,一切都会正常。

即使在c99(也是ANSI C)中,也不能在表达式中使用声明。。。