programing

C와 C++ 표준 사이의 관계는 무엇입니까?

goodsources 2023. 6. 10. 09:02
반응형

C와 C++ 표준 사이의 관계는 무엇입니까?

는 이 답변을 쓰고 있었고 http://en.cppreference.com/w/cpp/string/byte/tolower#Parameters 에서 인용했습니다.

서명되지 않은 문자로 표시할 수 없으며 EOF와 같지 않으므로 동작이 정의되지 않았습니다.

가 이 문구를 추가한 편집을 검사하러 갔을 때, 저는 저자의 논평을 발견했습니다.

C997.4/1에 따라 ctype.h 함수와 함께 음수 부호 문자를 사용할 수 없습니다.

저자는 C++ 문서에서 C99 표준을 인용하고 있습니다.그것이 유효합니까?저는 C++ 표준에서 이 함수의 정의에 대해 아무것도 찾을 수 없었기 때문에 그것이 유효하다고 가정해야 합니다.

하지만 이것은 두 가지 이유로 저와 관련이 있습니다.

  1. C++ 표준이 어떤 버전의 C 표준에 의존하는지 어떻게 알 수 있습니까?
  2. C와 C++ 사이의 불일치 목록이 곳곳에 있습니다.제가 C++과 관련하여 C 표준을 보고 있다면 제가 보고 있는 영역이 재정의되었는지 여부를 어떻게 알 수 있습니까?

첫 번째 질문의 경우:

C++ 표준은 표준 참조 섹션에 종속된 C 표준을 명시적으로 나열합니다.C++14의 경우 [intro.refs] 1.2/1은 목록 C 99에 해당합니다.

  • ISO/IEC 9899:1999, 프로그래밍 언어 — C
  • ISO/IEC 9899:1999/Cor.1:2001(E), 프로그래밍 언어 — C, 기술 코리젠덤 1
  • ISO/IEC 9899:1999/Cor.2:2004(E), 프로그래밍 언어 — C, 기술 코리젠덤 2
  • ISO/IEC 9899:1999/Cor.3:2007(E), 프로그래밍 언어 - C, 기술 코리젠덤 3

두 번째 질문의 경우:

C++ 표준은 C 표준의 어떤 부분도 암시적으로 통합하지 않습니다. C 표준에 대한 모든 참조는 명시적입니다.C++가 C에서 벗어나는 위치에 대한 좋은 정보 출처는 C++ 표준, 특히 C.1 [diff.iso]의 "호환성"입니다.

또한 C++ 표준 라이브러리에 대한 참조는 C++ 표준 라이브러리(C++14의 17-30장)의 설명 전반에 걸쳐 흩어져 있습니다.특히 중요한 것은 다음과 같습니다.

  • C 표준 라이브러리의 기본 포함을 설명하는 17.2 [library.c]
  • 18장 [언어].support에서는 많은 설명합니다.<c:::>C++ 표준 라이브러리의 헤더(C 표준 라이브러리 기능을 제공하는 헤더)입니다.

C++ 표준이 어떤 버전의 C 표준에 의존하는지 어떻게 알 수 있습니까?

C++ 14에서는 N4140의 1.2 [intro.refs]에 명시된 대로 ISO/IEC 9899:1999(그리고 세 개의 코리젠덤, 즉 본질적으로 C99)입니다.C++98에서는 C90, C++17에서는 C11이 될 것입니다. 하지만 C++ 표준은 항상 그것을 명시합니다.

제가 C++과 관련하여 C 표준을 보고 있다면 제가 보고 있는 영역이 재정의되었는지 여부를 어떻게 알 수 있습니까?

C++ 표준을 보면, C 정의를 명시적으로 가져오거나 -restrict또는 그것이 원하거나 명시적으로 수정하는 모든 C 동작.

일반적으로, 표준 그 자체 대신 좋은 문서를 읽는 것은 당신에게 도움이 될 것입니다.


첫 번째 질문을 해결하기 위해:

저자는 C++ 문서에서 C99 표준을 인용하고 있습니다.그것이 유효합니까?

네, 왜냐하면

1 표 74 [포함]std::tolowerme], 75, 76, 77, 78 및 79 머리글 설명<cctype>,<cwctype>,<cstring>,<cwchar>,<cstdlib>(문자 변환) 및<cuchar>,각각 다음과 같다.
2 이 헤더의 내용은 표준 C 라이브러리 헤더와 동일해야 합니다.<ctype.h>,<wctype.h>,<string.h>,<wchar.h>,그리고.<stdlib.h>및 C 유니코드 TR 헤더<uchar.h>각각 다음과 같은 수정 사항을 포함하여 [그 중 몇 가지가 에 적용됨].std::tolowerme]:

21.8 [c.strings] in N4140

편집이 정확하며 이 특정 텍스트는 C90부터 표준에 포함되었습니다.

C90 4.3부터

헤더는 문자를 테스트하고 매핑하는 데 유용한 몇 가지 기능을 선언합니다.모든 경우 인수는 int이며, 이 값은 부호 없는 문자로 표시되거나 매크로 EOF의 값과 같아야 합니다. 인수에 다른 값이 있으면 동작이 정의되지 않습니다.

C117.4/1부터

헤더는 문자를 분류하고 매핑하는 데 유용한 몇 가지 기능을 선언합니다.모든 경우 인수는 int이며, 이 값은 부호 없는 문자로 표시되거나 매크로 EOF 값과 같아야 합니다.인수에 다른 값이 있으면 동작이 정의되지 않습니다.

동일한 텍스트; C는 항상 이렇습니다.따라서 모든 C 버전이 동일하기 때문에 특정 C++ 버전이 어떤 C 버전을 사용하는지는 중요하지 않습니다.

언급URL : https://stackoverflow.com/questions/37614714/what-is-the-relationship-between-the-c-and-c-standards

반응형