>  기사  >  백엔드 개발  >  모든 Variadic 함수는 'float' 인수를 'double'로 승격합니까?

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

Barbara Streisand
Barbara Streisand원래의
2024-11-23 06:21:16683검색

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

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

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

Variadic Argument 승격

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

표준 사양

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

가변 함수 변환에 대한 cppreference

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

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

프로모션의 유래

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

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

위 내용은 모든 Variadic 함수는 'float' 인수를 'double'로 승격합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.