2010-11-25 7 views
0

아래의 코드가 컴파일되지 않는 이유는 무엇입니까? 간결함을 위해, 나는 구문 확인을 보인다 이러한 방식으로 기록 할 수있는 코드를 싶지만, C89 (ANSI C)에서 당신이 변수를 선언 할 수 있기 때문에 리눅스 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; 
} 

편집 C99에서

, 심지어 다른 부분에서, 당신은 (함수 호출과 같은) 표현의 내부 변수를 decalre 할 수는 없습니다 생각했다.

+0

C99 (ANSI C도 있음)조차도 식 내부에서 선언 할 수 없습니다. –

0

함수 호출 외부에서 변수를 선언해야하며 모든 것이 정상입니다.

관련 문제