printf()에서 Float 인수를 Double로 가변 함수 승격
C 및 C에서 printf() 함수는 가변 함수입니다. 이는 다양한 수의 인수를 취합니다. printf()의 특이한 동작 중 하나는 float 인수가 전달되면 함수가 인수를 받기 전에 double로 변환된다는 것입니다. 이로 인해 질문이 제기됩니다. 모든 가변 함수는 float 인수를 double로 승격합니까?
답변:
예, C 및 C의 가변 함수는 float 인수를 double로 승격합니다.
정의:
이 동작은 C99 및 C 표준 모두에 지정되어 있습니다. C99 표준 초안에서는 가변 함수에 대해 "float 유형의 인수는 double로 승격됩니다"라고 지정합니다. 마찬가지로 C 표준에서는 "부동 소수점 승격 대상이 되는 부동 소수점 형식, 호출 전에 인수 값이 승격된 형식으로 변환됩니다."라고 명시하고 있습니다.
이 승격의 근거는 다음과 같습니다. 프로토타입 선언이 없는 경우 float 인수를 double로 승격해야 하는 K&R C 표준과의 호환성을 유지합니다. 항상 바람직하지는 않지만 이전 버전과의 호환성을 위해 이 호환성이 유지되었습니다.
위 내용은 모든 Variadic 함수는 부동 소수점 인수를 Double로 승격합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!