2013-03-10 4 views
1
에 대한 선언이없는 이동 않습니다

코드 :어디 인수는 매개 변수

foo() 
{ 
} 
int main() 
{ 
    int a=20; 
    a = foo(20); 
    printf("\n\n\t A : %d",a); // will print zero. 
} 

질문 :

  1. 당신은 foo에 대한 반환이 존재하지 않는 것을 알 수 있습니다(). 그리고 그것은 'int'로 간주되는 입니다, 왜? 왜이 '암시 적 int'규칙인가? 왜 C의 디자이너들은 'int'를 너무 좋아 했나요?

  2. foo()에는 매개 변수 선언이 없으므로 가변 인수 인수 수는 입니다. 그렇다면 전달 된 인수는 어디로 이동합니까? 예 : foo (20) 20은 어디로 갔습니까?

  3. 위의 예에서 printf는 0을 인쇄하지만 그 이유는 무엇입니까?


지금 생각해

이제
foo() 
{ 
} 
int main() 
{ 
    int a=20; 
    a = foo(a); 
    printf("\n\n\t A : %d",a); // It'll print 20. 
} 
  • printf와 인쇄 (20) 이전처럼 왜 안 0?
+1

컴파일러 경고를 표시합니다. –

답변

1
  1. 이것은 내가 그것을 이해 원래 C 규격에서 역사적인 일이다. 그것은 당신이 리턴 타입을 명시하지 않는다면 여전히 int입니다. 그것이 당신이 그것을 이용해야한다는 것을 의미하지는 않습니다. 그건 내 책에 나쁜 스타일이야.

  2. 이 읽기 ​​: 당신은 무엇을 관찰하는 것은 당신이 아무것도 반환하지 않는 함수의 반환 값을 사용할 때 당신은 무엇을 얻을 정의되지 않은 동작입니다 Is it better to use C void arguments "void foo(void)" or not "void foo()"?

  3. .

+0

@VishalD 경고를 켜는 방법을 알아야합니다. GCC 나 Clang을 사용한다면'-Wall'. –

+0

@VishalD 포인트 넘버 2에 관해 당신에게 뭔가를 찾았습니다. – paddy

+1

Re : 실행 중 어떤 일이 일어나면'main'이 스택에 20을 int 인자로 넣은 다음'foo'가 그것을 사용하지 않고' foo'가 반환되면,'main'은 인수를 정리합니다. – che