C, C++, STL 각종 필요 라이브러리..

elfs의 이미지

쩝..제목이 거창하지요..--a..
별건 아니고..

C 를 쓰다가 최근 c++ 을 공부하고 있습니다.

첨엔 도대체 이게 뭔가 한참을 헷갈려 하다가 이제사 아주 조금 개념을 잡고 있습니다.

그런데 아직도 궁금한게 있는데..

1) C++ 은 기존에 stl 이 제정되기 전엔 그럼 c 용 함수들과 단지 클래스나 템플릿이라는 구조적인 부분만이 추가된 것이었었는가 하는것이랑요..

2)전에 어디 질문을 보니 stl 에서는 소켓라이브러리를 지원하지 않는다..라는 식의 내용이 있던데..그렇다면 총체적으로 아직도 결국 c 의 함수들을 이용하고 있다는 의미가 아닌가 해서요..구조체나..등등..

3) 그럼 c++ 의 라이브러리들만 가지고는 할 수 있는게 없는건가요? 업체들마다 다르게 제공하는 라이브러리가 아니면요..즉.. 예를 들자면
c 의 fopen 과 같은 stl 라이브러리는 뭐고 c 의 time() 과 같은 함수를 대칭할 수 있는 stl 라이브러리는 뭔가요?

4) 질문 보시면아시겠지만 아직 저 잘 개념 못잡고 있지요? --a..
무엇을 어떻게 알고 있는지 조언좀 부탁드립니다.

차라리 c를 몰랐다면 c++ 즉 클래스나 템플릿의 개념을 좀 더 쉽게잡을 수 있었을까요?

자꾸 c 랑비교하게 되고 그러네요....

jemiro의 이미지

STL도 제가 알기로는 SGI에서 만든 자료구조와 알고리즘을 제공해주는 템플릿 라이브러리 라고 알고 있는데요.

http://www.sgi.com/tech/stl/stl_introduction.html

Introduction to the Standard Template Library
The Standard Template Library, or STL, is a C++ library of container classes, algorithms, and iterators; it provides many of the basic algorithms and data structures of computer science. The STL is a generic library, meaning that its components are heavily parameterized: almost every component in the STL is a template. You should make sure that you understand how templates work in C++ before you use the STL.

혹시 유닉스쪽 프로그래밍을 하신다면, c, c++에 연연하시는것 보다는,
시스템 프로그래밍, socket, network, IPC, pthread ... 기타등등
공부 할것들이 끝이 없는걸로 알고 있습니다.

유닉스는 c 기반으로 작성 된놈이라서 java 나 mfc 정도 수준의 C++ API
를 기대하시는건 무리일것 같습니다.

elfs의 이미지

c++ 로 무언가를 기대하고 있다는 의미는 아니었었구요..

단지 실제 c++ 에 대해서 사람들이 어떻게 생각하고 있는지가궁금해서 입니다.

그리고 평생 한가지 OS류에 매달려 있는 개발자가 어디있겠습니까. 이것저것 다 공부하는 것이지요. :wink:

제가 궁금한건 음..그러니까... 위에 번호에 대한 것들이요..^^

purewell의 이미지

Quote:
유닉스는 c 기반으로 작성 된놈이라서 java 나 mfc 정도 수준의 C++ API
를 기대하시는건 무리일것 같습니다.

UNIX/Linux가 C 기반이더라도 살아온지 벌써 10년이 넘었습니다.

ㅡ_-) 당연히 고수준 Library가 있지요.

wxWindows Library는 10년의 역사(since 1992)를 가지고 있더군요.

http://www.wxwindows.org

대체로 코딩 규칙은 MFC와 비슷합니다.

IBM 개발자 홈페이지던가? 거기에 보면 MFC에서 wxWindows로

포팅하는 방법(팁?)에 대한 기사를 본 것 같은데... 흠...

아무튼 그렇다구요...

(왠지 딴지 거는 것 같아서 죄송합니다)

_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz

cedar의 이미지

elfs wrote:
쩝..제목이 거창하지요..--a..
별건 아니고..

C 를 쓰다가 최근 c++ 을 공부하고 있습니다.

첨엔 도대체 이게 뭔가 한참을 헷갈려 하다가 이제사 아주 조금 개념을 잡고 있습니다.

그런데 아직도 궁금한게 있는데..

1) C++ 은 기존에 stl 이 제정되기 전엔 그럼 c 용 함수들과 단지 클래스나 템플릿이라는 구조적인 부분만이 추가된 것이었었는가 하는것이랑요..

C++98 최종 표준 승인 이전에는 공식적인 C++ 기본 제공 라이브러리는 스트림(iostream) 밖에는 없었습니다.
C++의 문법적인 부분은 94년 표준 개정 초안이 소개되었을 때 대부분 완성되었다고 할 수 있습니다.
그러나 언어는 단순히 문법적인(syntactic) 구조만으로 판단할 수는 없습니다.
언어가 제공하는 라이브러리가 언어의 의미적인(semantic) 측면을 결정합니다.
C++98에서 변화된 표준 라이브러리 중 가장 핵심인 STL의 도입은 C++의 프로그래밍 패러다임을
객체지향(OOP)에서 제네릭 프로그래밍(Generic Programming, GP)로 바꾸어 놓았다고 할 수 있습니다.

elfs wrote:

2)전에 어디 질문을 보니 stl 에서는 소켓라이브러리를 지원하지 않는다..라는 식의 내용이 있던데..그렇다면 총체적으로 아직도 결국 c 의 함수들을 이용하고 있다는 의미가 아닌가 해서요..구조체나..등등..

표준 라이브러리는 소켓은 커녕 멀티 스레딩조차 정의하고 있지 않습니다.
'표준'이라는 의미 자체가 어떤 시스템에서든 작동되어야 하는 것이라,
조금이라도 시스템에 종속적인 기능은 전혀 포함되어 있지 않습니다.
앞으로 C++ 표준이 개정될 때는 스레딩이나 소켓에 대한 지원이 포함될 수도 있겠죠.

참고로 C++로 플랫폼 독립적인 네트워크 프로그래밍을 할 수 있도록 지원하는 라이브러리로
ACE(Adaptive Commnunication Enviroment) Framework라는 것이 있습니다. 이 라이브러리를 위한 학습서로는
C++ Network Programming Vol. 1 : Mastering Complexity with ACE and Patterns
C++ Network Programming Vol. 2 : Systematic Reuse with ACE and Frameworks
를 보시면 됩니다. 1권은 번역서도 나와있습니다.

elfs wrote:

3) 그럼 c++ 의 라이브러리들만 가지고는 할 수 있는게 없는건가요? 업체들마다 다르게 제공하는 라이브러리가 아니면요..

즉, 표준 라이브러리로는 시스템 종속적인 것은 전혀 개발할 수 없고, 기본적인 콘솔 입출력 프로그래밍만 가능합니다. 물론 이것만 있어도 분야에 따라 여러가지 다양한 애플리케이션을 제작할 수 있습니다.
표준은 동일한 소스 파일을 사용해서 어떤 시스템에서도 컴파일만 하면 작동되는 이식가능한 코드가 되는 것에 목적을 두는 것입니다.

elfs wrote:

즉.. 예를 들자면
c 의 fopen 과 같은 stl 라이브러리는 뭐고 c 의 time() 과 같은 함수를 대칭할 수 있는 stl 라이브러리는 뭔가요?

fopen()을 대신하는 C++의 기능은 스트림 라이브러리에 포함된 fstream 류의 클래스(iostream의 자손 클래스)를 쓰면 됩니다.
time()은 C++ 라이브러리에는 없습니다. C 라이브러리에 있는 것만으로 충분하기 때문이죠.

elfs wrote:

4) 질문 보시면아시겠지만 아직 저 잘 개념 못잡고 있지요? --a..
무엇을 어떻게 알고 있는지 조언좀 부탁드립니다.

차라리 c를 몰랐다면 c++ 즉 클래스나 템플릿의 개념을 좀 더 쉽게잡을 수 있었을까요?

자꾸 c 랑비교하게 되고 그러네요....


확실히 C를 먼저 배우고 C++을 할때 문제가 되는 경우가 많더군요.
컴파일러만 C++을 쓸 뿐 C식의 프로그램이 되어버리죠. :oops:
차라리 Python이나 Java를 먼저 배운 사람이 적응이 빠르죠.

이러한 잘못된 학습 방법을 뒤집어 엎고, 제대로 된 C++ 학습 방향을 제시하는 책으로 Accelerated C++ : Practical Programming by Example을 추천합니다. 링크의 서평 중 곽용재님의 글을 잘 읽어보시기 바랍니다.
그리고 쓸만한 C++ 라이브러리 레퍼런스도 갖추어 놓아야 합니다.
The C++ Standard Library : A Tutorial and Reference를 꼭 보시길 권합니다.(둘 다 번역서도 물론 있습니다. 샘플 챕터를 다운받아보세요.)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.