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
'programing' 카테고리의 다른 글
자바스크립트에서 이것과 self의 차이점 (0) | 2023.10.29 |
---|---|
정점 배열 객체 이해(glGenVertexArrays) (0) | 2023.10.29 |
CSS: 글꼴 크기 100% - 무엇의 100%? (0) | 2023.10.24 |
XML 네임스페이스의 용도는 무엇입니까? (0) | 2023.10.24 |
복잡한 MySQL 쿼리 (0) | 2023.10.24 |