2011-02-16 3 views
0

함수에 기본 형식이 int로 승격되고 float가 double로 승격된다는 것을 알았습니다. 그러나 다음과 같은 함수에 char을 전달하면 대기합니다.함수 인수의 암시 적 캐스팅,이 내부에서 어떤 일이 발생합니까?

char character; my_func (character)

void my_func (char buffer)

버퍼를 참조 할 때마다 그것은 int ??? 예인 경우 버퍼를 char로 참조하는 코드에 대해 잠시 기다려주십시오. int에서 char로 캐스트하고 있습니까? 포인터, 배열 및 구조체 열거 형 조합 등은 어떻습니까? 내가 int 형으로 변환 될 것이기 때문에 int 형 대신 int 형을 사용하는 것이 에러라고 생각하기 때문에 매우 두려워합니다. 권리?

고마워.

+0

번호 캐스팅은 한 유형을 다른 유형에 할당 할 때 발생합니다. 여기에는 int가 없습니다. 버퍼는 char이며 항상 char이어야한다. 당신은 걱정할 것이 없습니다. –

답변

0

함수 호출에서 기본 유형을 홍보하는 것은 프로토 타입이없는 구식 코드 (컴파일러가 지원하는 경우) 또는 ... varargs 함수를 사용하는 경우에만 관련이 있습니다. 프로토 타입이 있고 일치하는 경우 전환 또는 프로모션이 없습니다.

프로모션은 숫자 유형에만 적용되며 포인터, 배열, 구조체 또는 공용체에는 적용되지 않습니다.

+1

예, OMG 나는 절대로 잊지 마라, LOOK # 함수 호출의 인수가 표현식이기 때문에 인수가 함수에 전달 될 때 유형 변환도 발생한다. 함수 프로토 타입의 부재에서 char과 short는 int가되고 float은 double이됩니다. 따라서 char 및 float로 함수를 호출하는 경우에도 함수 인수가 int이고 double이 선언 된 것입니다. # K & R C 책, 고마워. – drigoSkalWalker

관련 문제