매우 간단한 질문 : 동일한 시스템에서 C int
이 C++ int
과 동일한 것을 보증합니까?C 및 C++ 유형의 상호 운용성
물론 이것은 물론 이론적 인 질문입니다.
C 및 C++ 표준은 동일한 언어를 사용하여 기본 유형을 정의합니다. 포트란 2003
use ISO_C_BINDING
integer(kind=c_int) :: i
는 "동반자 C 프로세서"에 int
유형과 호환되는 정수 유형을 선언 분명히 것을 만드는 반면, 나는이 C++ 참고 표준에서 그러한 주장을 찾을 수 없습니다. Fortran이 C++보다 강력한 C 상호 운용성 보장을 제공한다는 것은 매우 이상한 것 같습니다!
내가 찾을 수있는 가장 가까운 모든 구현은 C 프로그래밍 작성된 함수에 연결를 제공해야한다
한다고 섹션 7.5 [dcl.link]는 C++ 11 표준의 제 3 항의하다 언어
그러나이 작은 문장은 기본 형식의 호환성을 보장 할 정도로 강하지는 않습니다.
C++ 표준에서 내가 간과 한 다른 언어가 있습니까? 아니면 아무도 명시 적으로 언급하지 않으려 고 당연히 당연한 것으로 받아 들여지고 있습니까?
EDIT : David Schwartz는 "동일한 시스템"이라고 말하면 주석이 잘못되었다고 지적합니다. 나는 실제로 하드웨어, OS, 시스템 라이브러리 등과 같은 "플랫폼"을 의미했습니다. 물론 ABI 문제입니다. 인용 된 구절에서 C++ 표준은 extern "C"
을 사용하여 C 함수를 호출 할 수 있다는 것을 나타내려는 것 같습니다. 그러나 충분히 보장되는지 확실하지 않습니다.
같은 시스템에서 같은 컴파일러 및 컴파일러 설정으로 * 확장 할 수 있습니다. 그렇지 않으면 대답은 분명히 아니오입니다 (64 비트 시스템에서 32 비트 int로 i386 바이너리를 컴파일 할 수 있음) –
"같은 시스템"은 무엇을 의미합니까? 같은 하드웨어? 같은 OS인가요? 같은 컴파일러 스위트? 동일한 시스템 라이브러리? –
아마도 3.9.1p3'부호가있는 부호없는 정수 유형은 C 표준 5.2.4.2.1 절에 주어진 제약 조건을 충족해야합니다. –