2010-11-25 23 views
0

以下のコードがコンパイルされないのはなぜですか?簡潔にするために、私は文法的にOKと思われる、このように書かれるコードを、たいのですが、C89(ANSI 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

を不平を言いますブロック。

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; 
} 

EDIT C99で

、でもあなたが他の部分で、あなたは(関数呼び出しのような)式の内部変数をdecalreすることはできませんと思いました。

+0

C99(これもANSI Cです)でも、式の中に宣言を入れることはできません... –

0

変数を関数呼び出しの外に宣言しても問題ありません。