C와 C++ 표준 사이의 관계는 무엇입니까?
저는 이 답변을 쓰고 있었고 http://en.cppreference.com/w/cpp/string/byte/tolower#Parameters 에서 인용했습니다.
서명되지 않은 문자로 표시할 수 없으며 EOF와 같지 않으므로 동작이 정의되지 않았습니다.
제가 이 문구를 추가한 편집을 검사하러 갔을 때, 저는 저자의 논평을 발견했습니다.
C997.4/1에 따라 ctype.h 함수와 함께 음수 부호 문자를 사용할 수 없습니다.
저자는 C++ 문서에서 C99 표준을 인용하고 있습니다.그것이 유효합니까?저는 C++ 표준에서 이 함수의 정의에 대해 아무것도 찾을 수 없었기 때문에 그것이 유효하다고 가정해야 합니다.
하지만 이것은 두 가지 이유로 저와 관련이 있습니다.
- C++ 표준이 어떤 버전의 C 표준에 의존하는지 어떻게 알 수 있습니까?
- 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::tolower
me], 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::tolower
me]:
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
'programing' 카테고리의 다른 글
반복기 머리글 또는 바닥글에서 컨트롤을 찾는 방법 (0) | 2023.06.10 |
---|---|
Active Directory를 사용하는 .NET의 사용자 그룹 및 역할 관리 (0) | 2023.06.10 |
R에서 정수 클래스와 숫자 클래스의 차이점은 무엇입니까? (0) | 2023.06.05 |
UIViewControllerContextTransition을 사용하여 "From ViewController"가 사라짐 (0) | 2023.06.05 |
ggplot2 구문이 타당할 때 RCMD 검사 "글로벌 변수에 대한 가시적 바인딩 없음" 참고 사항을 어떻게 처리할 수 있습니까? (0) | 2023.06.05 |