cmath 대 math.h (및 유사한 c 접두어 대 .h 확장 헤더)
내가 좋아하는 것들 사이의 차이점에 대한 몇 가지 정보를 본 적이 iostream
대를 iostream.h
. 그들 사이의 차이점은 .h
확장이없는 버전은 네임 스페이스를 채우지 않고 확장이 있는 버전 은 채워지지 않는다는 것입니다.
cmath
대에 대해서도 동일 math.h
합니까? 왜 cmath
(그리고 이와 유사한 다른 많은 파일들) c
이 그냥 있는 것이 아니라 접두사가 붙는 이유는 무엇 math
입니까? 그들 사이에 더 많은 차이점이 있습니까?
iostream과 iostream.h와 같은 것의 차이점에 대한 정보를 보았습니다.
[iostream.h]는 표준 헤더가 아닙니다.
그것은 당신이 제기하는 문제의 예가 아닙니다.
[cmath]는 std
네임 스페이스의 심볼을 정의하고 전역 네임 스페이스의 심볼을 정의 할 수도 있습니다. [math.h]는 전역 네임 스페이스의 기호를 정의하고 std
네임 스페이스의 기호를 정의 할 수도 있습니다 . 전자를 포함하고 정규화되지 않은 기호를 사용하면 한 컴파일러에서는 컴파일되지만 다른 컴파일러에서는 컴파일되지 않을 수 있습니다. 따라서 [math.h]를 사용하는 것이 좋습니다. 일반적으로 이러한 헤더 쌍의 경우 [.h] 버전을 사용합니다.
C ++ 98 xxx
은 전역 네임 스페이스를 오염시키지 않는 c 헤더 의 공식적인 보증을 제공했습니다 . 아마도 그것이 그들이 정의 된 이유 일 것입니다. 그러나 그것은 오염시키는 것보다 구현하기가 조금 더 어려웠 기 때문에 실제로 내가 아는 표준 라이브러리 구현이 이와 관련하여 표준을 따르지 않았으므로 마침내 C ++ 11의 현실을 반영하도록 변경되었습니다.
아마도 이것이 도움이 될 것입니다.
C ++ 라이브러리에는 동일한 헤더 파일 구조로 구성된 C 언어 라이브러리와 동일한 정의가 포함되지만 다음과 같은 차이점이 있습니다.
1-각 헤더 파일은 C 언어 버전과 이름이 같지만 "c"접두사가 있고 확장자가 없습니다. 예를 들어, C 언어 헤더 파일 <stdlib.h>에 해당하는 C ++는 <cstdlib>입니다.
2-라이브러리의 모든 요소가 std 네임 스페이스 내에 정의됩니다.
이름이로 시작 c
하는 헤더는 C 표준 라이브러리의 헤더에서 파생됩니다. c
접두사가 제거되고 .h
접미사가 추가 된 해당 헤더 는 C 표준 라이브러리 헤더와 동일하거나 거의 동일합니다.
<cmath>
std
네임 스페이스 아래에 관련 기호를 정의합니다 . <math.h>
전 세계적으로 정의합니다.
(방금 그렇게 간단하지 않다는 것을 알게되었습니다. Alf의 답변을 참조하십시오.)
'Development Tip' 카테고리의 다른 글
디버거가 비동기 메서드에서 예외를 중단 / 중지하지 않음 (0) | 2020.12.31 |
---|---|
#pragma comment (lib,“xxx.lib”) Linux에서 동등합니까? (0) | 2020.12.31 |
CentOS 7.2의 Docker : kernel : unregister_netdevice : lo가 무료가되기를 기다리고 있습니다. (0) | 2020.12.31 |
Python에서 인스턴스 재 분류 (0) | 2020.12.31 |
Haskell의 Priority Queue 구현 비교 (0) | 2020.12.31 |