programing

C 표준 라이브러리의 기능을 C++에서 사용할 수 있습니까?

bestprogram 2023. 10. 24. 21:31

C 표준 라이브러리의 기능을 C++에서 사용할 수 있습니까?

저는 지금 C와 C 표준 라이브러리에 익숙해지고 있는데 나중에 C++와 함께 일할 때 이 분야에 대한 제 지식이 유용할지 궁금합니다.

따라서 C 표준 라이브러리에서 제공하는 기능을 C++ 설정으로 사용할 수 있는지, 실제로 사용하는 것이 타당한지, 왜 가능한지 알고 싶습니다.

네, C++는 원래 C++에서 어떤 C 라이브러리라도 쉽게 사용할 수 있도록 설계되었습니다.물론 이것은 약간 덜 사실입니다. (특히 C 라이브러리가 어떤 C++ 키워드를 사용하는 경우에는)try아니면dynamic_cast, 작동하지 않습니다. 또한 C++로 코딩된 콜백이 C 라이브러리로 전달되면 큰 혼란이 발생할 수 있습니다.

C++에서 C 헤더 파일을 사용하는 표준 방법은

 extern "C" {
 #include <some_c_header_file.h>
 };

그리고 대부분의 기존 C 헤더 파일들은 C++와 협력하도록 설계되어 있습니다.

 #ifdef __cplusplus
 extern "C" {
 #endif

 //// most of the header material goes here, C style

 #ifdef __cplusplus
 }; // end extern "C"
 #endif

실제로 많은 C 표준 헤더는 위와 같은 것들을 랩핑하는 동등한 C++ 헤더를 가지고 있습니다.namespace std). Eg C<stdio.h>C++ 입니다.<cstdio>-하지만 종종 정품 C++ 스트림을 선호해야 합니다 (<iostream>), 그러나printf-like 루틴은 대개 gettext(3)와 함께 현지화하기 쉽습니다.

하지만 C와 C++매우 다른 언어입니다.관용적인 C++11로 코딩해야 합니다 (표준 C++ 용기 사용,auto, 닫기, RAI, 스마트 포인터, 5의 규칙, SFINAE, 예외, 익명 함수, ...)

일부 표준 C 함수는 관용적인 C++에서 그다지 유용하지 않습니다.예를 들어, 직접 사용하지 않을 가능성이 높습니다. malloc정품 C++로 (최소한 선호)new- 여전히 매우 낮은 레벨이고 C++ 정신에 더 이상은 없는 - 힙 할당을 수동으로 처리하지 않고 컨테이너와 스마트 포인터를 많이 사용할 가능성이 높습니다.)그러나 POSIX 함수(특히 syscalls(2))는 C++에서 상당히 유용합니다. C++ 예외와 호환되지 않을 가능성이 높습니다.

그건 그렇고, C++는 이번 세기에 많이 발전했습니다.C++98은 배우지 말고 적어도 C++11은 (그들 사이에 엄청난 차이가 있다)최신 컴파일러(GCC 또는 Clang/LLVM)를 사용합니다. 2015년 12월에는 적어도 GCC 5 또는 Clang/LLVM 3.7을 의미합니다.컴파일러에서 모든 경고 및 디버그 정보를 활성화하는 것을 잊지 마십시오(예:g++ -Wall -Wextra -g -std=c++11)

C++(적어도 C++11을 의미함)는 C보다 훨씬 복잡한 어려운 프로그래밍 언어입니다.몇 주간의 독서 기간이 필요할 것이고, 좋은 코딩 스타일과 훈련이 필수적입니다. (C++로 아주 엉망인 코드를 쉽게 쓸 수 있습니다.)프로그래밍부터 시작: C++사용한 원칙 실습

C만 알면 C++를 배우기 SICP를 읽고(그리고 스킴을 조금 공부하는 것도) 보람이 있다고 생각합니다.

정의되지 않은 행동의 개념은 C에서 그리고 아마도 C++에서 모두 매우 중요합니다.당신은 그것을 절대적으로 이해할 필요가 있습니다(C 참조).라트너의 블로그)와 피하세요.

또한 기존의 무료 소프트웨어와 그 소스 코드를 연구(또는 기여)함으로써 많은 것을 배울 수 있을 것입니다.그러므로 저는 리눅스를 사용하는 것을 추천합니다.

ISO/IEC N3690(c++ 표준)의 한 단락만 인용하겠습니다.

17.2 C 표준 라이브러리

1 C++ 표준 라이브러리는 정적 타입의 안전성을 보장하기 위해 적절히 조정된 C 표준 라이브러리의 설비도 이용할 수 있습니다.

그래서 그냥 네!

네. C++ 예제에서 표준 c 라이브러리 함수를 사용할 수 있습니다.

    stdio.h   => cstdio   (printf/scanf)
    math.h    => cmath     (sqrt)  

언급URL : https://stackoverflow.com/questions/34307731/can-functions-from-the-c-standard-library-be-used-in-c