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

时间:2010-11-25 18:47:20

标签: 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;
}

2 个答案:

答案 0 :(得分:2)

因为在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中,即使你可以在其他部分,你也不能在表达式内部去掉变量(比如函数调用)。

答案 1 :(得分:0)

你应该在函数调用之外声明你的变量,一切都会好的。