2011-01-10 6 views
2

와 stdarg.h는 경고 :왜 stdarg.h의 첫 번째 인수가 레지스터입니까?

경고 : 첫 번째 인수가 레지스터에 저장 될 것입니다 이유는 첫 번째 인수는 레지스터에, 와 stdarg.h는 주소

받을 수 없어?

+3

귀하의 질문은 특정 구현에 관한 것이며, OS 및 컴파일러를 지정하십시오. –

+2

이것은 ABI에 따라 다르며 사용중인 CPU 제품군과 OS에 따라 다릅니다. –

+0

stdarg.h는 경고를 생성하지 않습니다. 컴파일러는 컴파일 한 일부 코드를 기반으로합니다. 코드와 해당 코드를 컴파일하는 데 사용하는 명령 줄을 게시하십시오. – nos

답변

2

일부 호출 규칙 (예 : fastcall)은 스택에 배치하지 않고 처음 몇 개의 인수를 레지스터에 전달합니다. 그러나 이렇게하면 이러한 변수의 주소를 사용할 수 없게되고 대부분의 variadic 함수 구현에 의존합니다. 따라서 컴파일러는 인수뿐만 아니라 레지스터에 스택에 인수를 추가하거나 가변 함수에 다른 호출 규칙을 사용할 수 있습니다.

관련 문제