Development Tip

cmath 대 math.h (및 유사한 c 접두어 대 .h 확장 헤더)

yourdevel 2020. 12. 31. 23:02
반응형

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 접두사 대 .h 확장 헤더


이름이로 시작 c하는 헤더는 C 표준 라이브러리의 헤더에서 파생됩니다. c접두사가 제거되고 .h접미사가 추가 된 해당 헤더 는 C 표준 라이브러리 헤더와 동일하거나 거의 동일합니다.

<cmath>std네임 스페이스 아래에 관련 기호를 정의합니다 . <math.h>전 세계적으로 정의합니다.

(방금 그렇게 간단하지 않다는 것을 알게되었습니다. Alf의 답변을 참조하십시오.)

참조 URL : https://stackoverflow.com/questions/10694255/cmath-vs-math-h-and-similar-c-prefixed-vs-h-extension-headers

반응형