C에서 함수 인수의 형식 승격에 대한 이해는 유형이 char
또는 short
인 프로토 타입이 아닌 함수를 호출하면 해당 함수가 int
.
질문 : long
을 인수로 사용하고 sizeof(long) > sizeof(int)
으로 전화하면 어떻게됩니까?Type Promotion in C, 인수로 long 전달하기
매개 변수가 long
으로 전달 된 경우 모든 통합 매개 변수를 승격해야하는 유형으로 long
을 선택하지 않는 이유는 무엇입니까? 인수의 형식 승격 뒤에 이유가 아니라, 컴파일러가 스택에 푸시 된 매개 변수를 모두 동일한 길이로 만듦으로써 컴파일러를 더 간단하게 만드는 것입니다. 따라서 런타임 시스템은 매개 변수의 수만 알아야하므로 귀찮은 것이 아닙니다. 그들의 크기는?
"프로토 타입이 아닌 함수를 호출하면"하지 마십시오. 그건 어떤 유형 홍보가 아니거나위한 것입니다. 이 경우, 컴파일러는 추측해야하고 당신이 제공하는 매개 변수에 대해 "아마도 int"보다 더 나은 것을 추측 할 수 없습니다. 다른 한편으로 타입 프로모션은 알려져 있지만 다른 타입의 하나 이상의 피연산자 (예를 들어, "+", "-", ....)를 처리 할 때 사용되며, 여기서 하나는 다른 것보다 "작다". 작은 것이 다른 유형으로 승격됩니다. 프로토 타입 함수 (알려진 매개 변수 유형이있는 경우)를 호출하면 매개 변수가 "작음"유형 인 경우 유형 승격을 얻을 수 있습니다. – Yunnosch
@Yunnosch "는"아마 int "보다 더 나은 것을 추측 할 수 없습니다. 실제로 float의 경우"double "을 추측 할 수 있습니다. –
"인수의 형식 승격 뒤에있는 이유가 아닙니다. 컴파일러를 더 간단하게 작성하는 것입니다."-> 프로모션은 더 좁은/더 빠르게 프로세서의 좁은 유형을 "기본"(다소간) 정수 유형으로 가져 오는 것입니다. 암호. – chux