c++ ? c + class = c++?

ioe의 이미지

c++열심히 공부중에 c++관련사이트에서
그냥 reference와 함께 예제가 조금있는곳을 찾아
이레 저레하는중입니다.

아주 기초는 다해보고 좀 뭔가해보기위해 이러저레 지원되는
함수들 찾는데 stl?이랑 iostream에 대한것 뿐

같이 걸린 링크들은 다 c용 함수들뿐이네요?
순간 c++은 객체지향 프로그래밍을 위한 class문법이
더해져있고 stl이 기본으로 쓸수있게되었어
편하다?
이렇게 단정지어야 하는지 혼돈중입니다.
머리를 흔드는이??? 마크들..

:D :shock: :roll: 추가로 초보가 볼만한 c나 c++용 함수 레퍼런스(샘플있는거면 더할나위없구요) 주소있으시면 부탁드립니다.

손쉬운 초고급언어만 하다 슬슬 저급언어로 돌아가려하는 초심자가.
python이 나를 편의주의자로 바꾸는 구나 아이고....

익명 사용자의 이미지

C와 C++은 서로 전혀 다른 독립된 언어로 생각하시는 편이 좋습니다. C++을 C의 확장판으로만 보게 될 경우 C++다운 프로그래밍 방법을 익히는 데 장애가 될 수 있습니다. 시작은 C with Class 였을지 모르지만, C++은 최근 10년동안 상당히 많은 변화를 겪었습니다. 표준이 정해진 것도 불과 7년 전(1998년)이지요. 또한 아직도 상당히 빠른 속도로 변해가는 언어 중 하나입니다.

레퍼런스로는 구글에서 C++ reference 로 검색하시면 쓸만한 것들을 많이 찾을 수 있으며, 책으로는 C++ 창시자가 쓴 The C++ Programming Language 가 어떻게 짤 것인지 참고하는 데 좋습니다(다만 C++에 대해 아무것도 모를때 보면 좀 부담이 될듯...).

C는 특별히 compiler를 가정하고 만들어진 언어가 아닙니다. C 표준 문서에 compiler란 단어는 딱 한번 나오는데, 별로 대단치 않은 주석에 쓰였을 뿐입니다. 도스시절에 C 인터프리터가 있다는 말을 들은 적이 있는데, 요새도 쓰이는지는 잘 모르겠습니다. 구글에서 검색해 보니 다음 두개의 링크가 발견되는군요. 하지만 학습용으로라도 유용할지는...

http://root.cern.ch/root/Cint.html
http://www.softintegration.com/

C++의 경우에는 잘 모르겠습니다. 워낙에 나날이 골때리는 언어가 되어가고 있기 때문에... 과연 인터프리터로 구현할 수 있을지?

ioe의 이미지

감사 합니다. 제가원하는 답은
c++로 코딩하면서 함수들은 그대로 c 함수를 써야하고,
c++공부를 위해 c 함수들을 이용하면서 공부를 해야만하는것인가
하는 문제입니다.

c로 된 stransard library들을 그대로 c++에 써야하는건지
아니면 c++을 위한 standard library가 있습니다.

저를 질문 속에 빠지게한 소스입니다.

#include <iostream>
#include <time.h>
#include <string>

using namespace std;

int main(void)
{

	time_t rawtime;
	struct tm * timeinfo;

	time ( &rawtime );
	
	timeinfo = localtime ( &rawtime );
	
	cout << asctime (timeinfo) << endl ;  
	
	cout << ctime (&rawtime) << endl ;
	
	cout << timeinfo << endl ;
	return 0;
}

익명 사용자의 이미지

C++의 새로운 특징들은 재미있고 유용한 것들이 많습니다. 이런 것들은 기존의 C의 고정관념을 버리지 않고서는 쉽게 습득하기 힘듭니다. 그렇기 때문에 C++을 처음 배우는 사람들에겐 'C를 잊어라'라고 말하고 있습니다.

그러나 막상 실제로 배운걸 써야 되는 순간이 된다면, 너무 새로운 것만을 고집할 필요는 없습니다. C 스타일 라이브러리들도 분명 C++의 한 모습인데, 익숙치도 않은 도구를 들고서 끙끙댈 필요는 없겠지요.

'어느 한쪽만을 써야 된다'라고 생각하지 마시고, 상황에 맞는 적절한 운영으로 상대의 GG를 받아내도록 합시다.

삼줄요약
일할때는 익숙한 스타일을
배울때는 새로운 스타일을
시도해보아요

죠커의 이미지

표준 라이브러리에 있는 것을 안 쓸 이유가 없습니다. C++을 이런 것이다고 규정하는 것은 오히려 자신에게 함정이 된다고 생각합니다.

그리고 큰 서점에 방문해서 effective c++과 modern c++ design를 한번 씩 훑어 보시면 도움이 될 수도 있을 것 같습니다.

ioe의 이미지

답변 감사 합니다.effective는 아주 잘보고 있는데 역시 메모리쪽에서
약간 고전이지만. :D more effective와 modren은 근 시일내에
구입을 서둘러야 할것 같군요.

약간 질문이 서두가없어서 하나 다시 질문을 드리면,

c++개발시에 c용? standard library를 사용해서 개발하는게 맞는것지
아니면 c++용? c에서 사용하던 standard library(time,math등등)
가 있는건데 제가 못찾는 건지.

그리고 c++을 실전 개발시 c용? standard lib.를 사용하는지입니다.

libstdc++-devel 문서를 보니 iostream,stl등 문법에대한 reference등
뿐인데 c 문서에서는 각종 함수들 time.h,math.h등등 있어

질문의 요지는 c++ 개발시에 c용?? standard library를 사용하는것이
정상적이고 실무에 사용되는것인지 입니다.
아니면 제가 못찾고 해메는 것인지...

Rica의 이미지

C++ standard library가 있습니다만, 그것이 C의 기능을 모두 대체하는 형태로 만들어지지는 않았습니다. 즉, C++용으로 새로 만들어지지 않은 것들은 C의 것을 그대로 써야 한다는 이야기입니다.

C 라이브러리의 기능을 대체하는 함수군/클래스군이 새로 만들어졌어도 기존 루틴과의 호환성을 위해서 C라이브러리 함수를 사용하는 경우도 물론 있겠습니다.

한가지 달라진 점은 있습니다. <math.h> 대신 <cmath>를 인클루드하면 namespace std 안에 들어가 있는 함수들을 사용할 수 있습니다. :)

서지훈의 이미지

ioe wrote:
답변 감사 합니다.effective는 아주 잘보고 있는데 역시 메모리쪽에서
약간 고전이지만. :D more effective와 modren은 근 시일내에
구입을 서둘러야 할것 같군요.

약간 질문이 서두가없어서 하나 다시 질문을 드리면,

c++개발시에 c용? standard library를 사용해서 개발하는게 맞는것지
아니면 c++용? c에서 사용하던 standard library(time,math등등)
가 있는건데 제가 못찾는 건지.

그리고 c++을 실전 개발시 c용? standard lib.를 사용하는지입니다.

libstdc++-devel 문서를 보니 iostream,stl등 문법에대한 reference등
뿐인데 c 문서에서는 각종 함수들 time.h,math.h등등 있어

질문의 요지는 c++ 개발시에 c용?? standard library를 사용하는것이
정상적이고 실무에 사용되는것인지 입니다.
아니면 제가 못찾고 해메는 것인지...


근데... 있는걸 다른 이유로 굳이 안쓰겠다면 모르겠지만... ㅡㅡㅋ
괜히 멋있어 보일려구 안쓰는건 아주 문제가 클것 같군요(물론 이건 아니겠지만).
계속 자신을 구석으로 모는 기분이랄까...?

C++사용하면서 iostream만으로 표현하기 불편한건 printf()를 사용하거나 기타 다른 get류 함수를 사용하기도 하는데...
굳이 너무 한정지을 필요는 없습니다.

그리고 C++은 분명 C의 확장입니다.
전혀 다른 언어로 보는건 "난 나니깐 아버지는 저한테 신경 써지 마세요." 이렇게 뻣대다 한 대 맞는거랑 같은듯 ㅡㅡㅋ

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

prolinko의 이미지

posix표준이(또는 전통적인 유닉스 시스템이) C로 구현되어 왔기 때문에 저수준의 시스템 콜들을 위해서는C로 작성된 함수들을 쓸 수 밖에 없습니다. (win32도 마찬가지)

자바같은 언어는 사실상 하나의 플랫폼이므로 시스템 함수 기능을 라이브러리에서 제공해 주는 것이고, 기타 고수준의 언어들에도 각자의 언어형식에 맞는 시스템 함수들의 바이딩을 제공하지만, C문법을 그대로 사용할 수 있는 C++에선 이런 함수 하나하나에 대한 1:1 binding을 제공하는 것이 무의미 하죠.

물론 네트웍이나 여러가지 시스템함수들에 대한 C++ library, framwork들이 나와있고, 여러가지 프로젝트들에서 유용하게 사용될 수 있습니다만, 어느 상황에서나 범용적으로 쓰여야 하는 "표준 라이브러리의 성격에는 맞지 않는 부분들이 있습니다.(물론 이런 "표준"에 대한 기준은 자바나 기타 언어와 C++ 라이브러리의 기본 설계시의 목적, 성격의 차이에따라 서로 다르겠죠.)

실제로 큰 C++프로젝트 개발시에는 이런 저수준의 C시스템콜들은 I/O 핸들을 담당하는 하위 클래스에 다 wrapping시키고(또는 이를 제공해 주는 라이브러리를 사용하던가) 상위 모듈들에서는 C 해더들을 include시키지 않는 것이 깔끔한 설계라고 할 수 있습니다.

그리고 iostream과 stl이 generic한 설계의 특성상(자바 라이브러리의 verbose 한 OOP 라이브러리와는 달리) 적은 개수의 API만으로 강력한 하고 풍부한 기능을 제공합니다. 처음 배우기는 어렵지만 Effective STL등을 보면서 쓰고 익히다보면 활용 범위가 굉장히 늘어나는 것을 아시게 됩니다. 이 기능 만으로 부족하시다면 차기 C++ 표준에 포함되기를 원하는 라이브러리들을 모아놓은 boost라는 라이브러도 사용하실 수도 있습니다.

덧. C++에서 과거 C라이브러리들의 사용을 위해서 <time.h>형태보다는 <ctime> 형태의 include를 권장하고 있습니다. 그리고 math.h와 비슷한 기능은 C++의 <numerics>에서 제공 되고 있습니다.

덧 2.

Quote:

근데... 있는걸 다른 이유로 굳이 안쓰겠다면 모르겠지만... ㅡㅡㅋ
괜히 멋있어 보일려구 안쓰는건 아주 문제가 클것 같군요(물론 이건 아니겠지만).
계속 자신을 구석으로 모는 기분이랄까...?

C++사용하면서 iostream만으로 표현하기 불편한건 printf()를 사용하거나 기타 다른 get류 함수를 사용하기도 하는데...
굳이 너무 한정지을 필요는 없습니다.

그리고 C++은 분명 C의 확장입니다.
전혀 다른 언어로 보는건 "난 나니깐 아버지는 저한테 신경 써지 마세요." 이렇게 뻣대다 한 대 맞는거랑 같은듯 ㅡㅡㅋ

C와 C++라이브러리를 혼용하여서 유용하게 사용하고 있고 익숙하신 분들에거 굳이 효율을 낮춰가며 전부 C++스타일로 바꾸라고 강요하고 싶은 생각은 없습니다.
하지만 아직 그런 스타일이 굳어지지 않았거나 제대로 C++을 한번 배워보자 하고 생각하시는 분들은 되도록 C라이브러리를 사용하지 않고 C++라이브러리로 해결하는 것이 진정한 C++ programmer가 되는 길이라고 생각합니다.

C에비해서 문서가 부족해서 그런지 사용하지 않는 분들이 많지만, C++ 스트림을 이용하면 printf에 서 제공하는 기능을 전부 포괄하는 base 변환, 자리맞춤등의 formatting을 포함한 입출력이 가능합니다. 예를 들어서 stringstream을 이용하면 fprintf 같은 formmated 문자열 생성도 가능합니다.

그리고 이런 코딩 스타일은 단순한 '멋'이 아니라 type-safety와 확장성같은 여러가지 면에서 분명히 장점들을 가지고 있습니다. 자세한 내용은 Effective C++ 초반부 등에 나와있습니다.

doldori의 이미지

ioe wrote:
질문의 요지는 c++ 개발시에 c용?? standard library를 사용하는것이
정상적이고 실무에 사용되는것인지 입니다.
아니면 제가 못찾고 해메는 것인지...

아주 정상적이고 실무에서도 많이 사용합니다. 제가 주로 사용하는 것들은 <cmath>와
<cctype>에 있는 것들이군요. 이들은 굳이 대체 함수들을 만들 필요가 없습니다.
그러나 <cstdio>, <cstdlib>, <cstring> 등에 있는 것들은 문제점이 있거나
불편하므로 stream, string 등을 쓰는 것이 더 좋습니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.