2010-11-25 7 views
0

Pourquoi le code ci-dessous n'est-il pas compilé? Par souci de concision, je voudrais le code à écrire de cette manière, ce qui semble syntaxiquement OK, mais compilateur gcc Linux se plaintInstanciation de fonctions et initialisation de variables en même temps

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

Répondre

2

Parce que dans C89 (ANSI C), vous pouvez déclarer des variables seulement au début de un bloc.

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

En C99, même pensé que vous pouvez dans d'autres parties, vous ne pouvez pas decalre les variables à l'intérieur des expressions (comme un appel de fonction).

+0

Même dans C99 (qui est aussi ANSI C), vous ne pouvez pas avoir de déclaration à l'intérieur d'une expression ... –

0

Vous devez déclarer vos variables en dehors de l'appel de fonction et tout sera OK.