"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 모든 Variadic 함수는 'float' 인수를 'double'로 승격합니까?

모든 Variadic 함수는 'float' 인수를 'double'로 승격합니까?

2024년 11월 16일에 게시됨
검색:787

Do All Variadic Functions Promote `float` Arguments to `double`?

가변 함수에서 Float 인수를 Double로 승격

이전 논의에서 printf()가 float 인수를 다음으로 승격한다는 점에 주목했습니다. 그것을 받아들이기 전에 두 배. 이것은 질문을 제기합니다: 모든 가변 함수가 이 승격을 수행합니까?

Variadic 인수 승격

예, C99 및 C 표준 모두에 따라 가변 인수는 가변 인수로 전달됩니다. 기능이 더블로 승격되었습니다.

표준 사양

  • C99(섹션 6.5.2.2): "float 유형의 인수는 double로 승격됩니다."
  • C ( 섹션 5.2.2): "부동 소수점 유형...이 승격된 유형으로 변환되기 전에 call."
  • C(섹션 4.6): "float 유형의 prvalue는 double 유형의 prvalue로 변환될 수 있습니다."

Variadic 함수 변환에 대한 cppreference

cppreference는 variadic에 대한 기본 변환 요약을 제공합니다. C의 함수:

  • std::nullptr_t에서 void*
  • Float 인수를 double로
  • bool, char, short 및 열거형에 대한 정수 승격

프로모션 출처

이 프로모션은 잠재적인 단점에도 불구하고 K&R C 표준과의 호환성을 위해 C에 도입되었습니다. C Rationale에 따르면:

"과거 관행과의 호환성을 위해 모든 인수 승격은 프로토타입 선언이 없는 경우 K&R에 설명된 대로 발생합니다. 여기에는 항상 바람직하지 않은 float 승격이 포함됩니다."

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3