c++은 왜 c의 특징을 포함하는가요?

khwkhw의 이미지

프로그래밍 언어론 책을 보는데

문제 중에 c++은 안전하지 않다고 알려진 c의 특징을 왜 포함 하는

가 라는 문제가 있는데 아무리 찾아봐도 모르겟어요

아시는분은 지식좀 나누어 주세요

문제 자체가 그냥썡뚱맞게

c++은 안전하지 않다고 알려진 c의 특징을 왜 포함 하는가?

이게 끝이에요 ;;

ps: 아니면은 그냥 c++이 c의 특징을 왜 포함하는가라도
가르쳐 주세요 ^_^:

hanzo69의 이미지

그 안전하지 않다라는 c의 특징이 뭔데요?
혹시 포인터인가요?

님ㅎ 즐~

khwkhw의 이미지

아니요 그냥 문제가 c++은 안전하지 않다고 알려진 c의 특징을 왜 포함하는가 이게 끝이에요 ;;

myueho의 이미지

..

hanzo69의 이미지

네이버 지식인에서 검색하니 언어의 변천이란 단어가 나오네요..

수업시간에 들은대로 적으시길... 그래야 학점 나올테니까요^_^;
주위에 누군가는 졸지 않고 받아적었겠죠...

그게 아니라면
보통 그런 소리는 자바 좋아하시는 분들이 포인터가 어쩌니 하면서 하시는 얘긴데....
그리고 보안 분야에서 c가 자체가 불안하다느니 어쩌니..

어차피 그런식이면 컴퓨터 자체를 쓰지 말아야죠

님ㅎ 즐~

xozu의 이미지

이전 c소스와의 호환성을 위한 것 아닌가요??

shji의 이미지

C++이 C의 문법을 포함하는 형태로 만들어졌으므로
당연히 C의 특징도 갖는 것이지 않나요?

Necromancer의 이미지

c++ 창시자가 그렇게 만들어 놨으니 그런거죠.

이름이 뱐 스트라우스트럽이었던가... 영문 철자가 좀 괴상하던데.

Written By the Black Knight of Destruction

theuhm의 이미지

Bjarne Stroustrup이 쓴
"Design and Evolution of C++"을 읽어 보시면 설명이 되어 있습니다.

..

theuhm의 이미지

Necromancer wrote:
c++ 창시자가 그렇게 만들어 놨으니 그런거죠.

이름이 뱐 스트라우스트럽이었던가... 영문 철자가 좀 괴상하던데.


Bjarne의 홈페이지에 가면 FAQ 1번이 "당신의 이름을 어떻게 발음합니까?" 라지요.. (wav파일도 링크되어 있습니다 :)
대략 우리말로 쓰면 뷔얀 스트롭스트룹을 각각 2음절로 발음하면 되는듯 하더군요;; 뷔얀 스톫스툷 정도가 될까요? -_-;

..

익명 사용자의 이미지

* evolution : 개혁, 과거를 개선
* revolution : 혁명, 과거와 단절

전자를 택했기 때문이겠지요.
서구 문화는 대체로 전자를 따르는 경우가 많은것 같습니다.
신기술이 나와도 구기술과 공존이 상당기간 지속되기도 하고 그러지요.
아직도 286컴퓨터 사용하는 사람도 있고, 신버전에 그리 민감하지 않다는...
개인적으로 인텔80x86씨리즈가 성공한 것은 과거와의 연속성때문이었다고 생각한다는..
아울러, MS가 성공한것도 과거 DOS용 게임을 버리지 않았다는 이유도 있을거라고 믿는다는.
아직 코볼도 널리 사용되고, 신생 프로그래밍 언어가 반드시 대박이 나지는 않는다는.
완전 객체지향적인 언어인 스몰토크가 성공했다고 보기에는 부족해 보인다는.
c로 개발된 수많은 라이브러리와 코드들을 유연하게 흡수할 수 있다는 장점도.
언어수준에서의 예외처리등을 지원하는것이 대세가 된것은 90년대 중반이라는.
(초기 c++은 그보다 아주 오래전에 설계되었다는)

반드시 혁명만이 좋은 것이 아니라 개선된 발전이 좋은 경우도 많다는 얘기를 하고 싶습니다.
신버전이 반드시 좋은것만은 아니겠지요.

왜 그랬는가는 역시 만든사람맘이겠지요.
한때 구소련 프로그래머가 어쩌구 하게 하려고 전략적으로 만들었다는, 믿거나 말거나 설도 떠돌았다는...

ㅡ,.ㅡ;;의 이미지

khwkhw wrote:
프로그래밍 언어론 책을 보는데

문제 중에 c++은 안전하지 않다고 알려진 c의 특징을 왜 포함 하는

가 라는 문제가 있는데 아무리 찾아봐도 모르겟어요

아시는분은 지식좀 나누어 주세요

문제 자체가 그냥썡뚱맞게

c++은 안전하지 않다고 알려진 c의 특징을 왜 포함 하는가?

이게 끝이에요 ;;

ps: 아니면은 그냥 c++이 c의 특징을 왜 포함하는가라도
가르쳐 주세요 ^_^:

그건 C++이기때문이죠..
만일 포함하지 않았다면 C++이 아니었을겁니다..
그 한예가 바로 Java 죠..

그리고 C++을만든사람은 외 C++을 만들었을까..?
개인적인 생각이지만 C의 인기때문이 아니었겠어요..
C가 좋지 않았다면 C++을 만들지도 않았겠죠..

한마디로 C++은 C의 인기의 여세를 몰아가기 위함이 아닌가..ㅋㅋ

(그냥 제생각입니다만..ㅎㅎ)
그런데 왜 이런질문이 나왔을까..?
아마도 C의 강점이자 장점이 자신한테는 맘에 안들었기때문에 나온질문이 아닐까요..
그것이 장점이라 생각하는사람이 있겠고 단점이라 생각하는 사람이 있겠죠..
아마도 단점이라 생각하는사람이 약간 비꼬기위해 던진 질문이 아닐까..하는..ㅋㅋ


----------------------------------------------------------------------------

익명 사용자의 이미지

hanzo69 wrote:
네이버 지식인에서 검색하니 언어의 변천이란 단어가 나오네요..

수업시간에 들은대로 적으시길... 그래야 학점 나올테니까요^_^;
주위에 누군가는 졸지 않고 받아적었겠죠...

그게 아니라면
보통 그런 소리는 자바 좋아하시는 분들이 포인터가 어쩌니 하면서 하시는 얘긴데....
그리고 보안 분야에서 c가 자체가 불안하다느니 어쩌니..

어차피 그런식이면 컴퓨터 자체를 쓰지 말아야죠

안전하지 못하다는 말에 상당히 거부감을 가지고 계시는군요
C 포인터는 뛰어난 유용성에도 불구하고 많은 문제점을 가지고
있는건 누구나 다 아는 사실아닌가요?

많은 자유를 허용하지만 그에대한 대가를 톡톡히 치를수도 있읍니다. 물론 그것이 C의 철학이기도 하지만.....

서지훈의 이미지

C++의 시작은 C이기 때문입니다.
다시 말해 C++은 C의 확장이죠.
C++에서 내세우는 OOP도 C의 struct에 일단 변수 뿐만 아니라, 함수까지 넣어서 만든게 class입니다(솔직히 이런 형태는 C에서 콜백을 이요하면 비슷하게 만들어 낼 수도 있습니다).
처음의 시작은 이렇게 해서 만들어 졌으나, 지금은 상호 보완적으로 발전을 하고 있습니다.
C++은 C에서 시작을 하고, C는 C++에서의 좋은 좀을 따다가 사용을 하고...
여하튼 C와 C++은 이런 관계이므로 닮을 수 밖에 없습니다.

번외로 java같은 경우도 C++을 모델로 해서 만들었기 때문에 C++와 비슷한 점이 많이 있습니다.

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

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

vacancy의 이미지

서지훈 wrote:
번외로 java같은 경우도 C++을 모델로 해서 만들었기 때문에 C++와 비슷한 점이 많이 있습니다.

Java나 C#의 경우는 문법은 C++와 비슷한 편이지만,
안쪽으로는 Object Pascal과 비슷한 점이 더 많은 것 같습니다.
C++이 주 모델은 아니지 않았을까 싶네요.

서지훈의 이미지

이 말은 Sun Microsoft사의 James Gosling이 주도하든 연구팀이 Oak라 명명 되어진 java를 만들면서 삼은 모델이 C++이고, 이의 확장에서 부터 시작하여 다른 특징들이 추가된 것입니다.
제가 알고 있기로는 ㅡㅡㅋ
의심가는 거나 틀린 부분 있으면 지적 해주시면 제가 다시 자료를 봐야 겟군요.
이 기억이 틀리다면 ㅡㅡㅋ

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

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

wildkuz의 이미지

khwkhw wrote:

c++은 안전하지 않다고 알려진 c의 특징을 왜 포함 하는가?

제 생각에 안전하지 않다는 건 assignment의 side effect 이거나 strong type checking 이 아니기 때문인 것 같은데요.
c의 특징을 왜 포함했는가는 당연히 만든 사람이 가장 잘 알겠지만, ^^;
c++ 이 왜 이렇게 유명한 언어가 될 수 있었나 생각해보면, c의 특징을 그대로 포함해 기존의 많은 c 프로그래머에게 상대적으로 쉽게 다가갈수 있지 않았나 싶습니다.

You may say I'm a dreamer.
But I'm not the only one.

yielding의 이미지

서지훈 wrote:

의심가는 거나 틀린 부분 있으면 지적 해주시면 제가 다시 자료를 봐야 겟군요.
이 기억이 틀리다면 ㅡㅡㅋ

Sun *Microsoft* 좀 의심이 가는군요(이해도 갑니다만) :D

Life rushes on, we are distracted

죠커의 이미지

여기 "쓰래드"에서 많은 분들이 답변을 올리시고 있지만 대부분은 "추측"에 지나치지 않나 생각합니다.

그 원인은 책이 잘못되고 잘못된 문제를 내고 있기 때문입니다.

잘못된 책을 보고 잘못된 질문을 올리셨고 많은 사람들은 잘못된 답변을 올리고 있습니다.

추측으로 시작해서 추측으로 끝나는 문제는 분쟁의 원인만 되지 않나 우려가 듭니다. 책의 저자가 이 쓰래드를 나중에 보고 "낚았다"라고 생각하지 않을까요? :-)

익명 사용자의 이미지

주제에서 어긋난 이야기지만 자바는 C++ -- 라는 이야기가 떠오르네요. ^^; Thinking in Java에 있던 이야기였던 걸로 기억합니다~~ (로그인 귀찮아라)

ㅡ,.ㅡ;;의 이미지

저는 C++을 C++이라고 한것이 별로 맘에 안듭니다.
제생각이지만.. 추구(?)ㅡㅡ; 하는건 딴판이면서.. 이름만..


----------------------------------------------------------------------------

doldori의 이미지

Anonymous wrote:
주제에서 어긋난 이야기지만 자바는 C++ -- 라는 이야기가 떠오르네요.

저도 주제와는 다른 얘기를 하렵니다. Scott Meyers는 연산자 오버로딩은 주의해서
사용하라고 했고, 오버로딩을 하려면 int와 동일한 방식으로 동작하도록 하라고 했죠.
만약 C가 int형이라면 C++ --는 잘못된 문법입니다. (C++의 연산 결과가 l-value가 아니므로.)
C가 클래스형일 때도 마찬가지로 C++, C--는 허용하면서 C++ --는 에러를 내도록
하고 싶습니다. 그리고 이들 연산자의 반환형은 보통 자신의 형이죠. 따라서
struct S
{
    const S operator++(int);
    const S operator--(int);
    S& operator++();
    S& operator--();
};

S C;    int i;
C++--;  i++--;  // error
++C--;  ++i--;  // error
++--C;  ++--i;  // ok

심심해서 헛소리 좀 해봤습니다. ^^;

운형의 이미지

oop에서 위험하다고 하는 건... 메쏘드 없이 접근하게되는 전역변수에 대한 이야기가 아닐까요.?
C++이 완벽하게 oop개념을 따르지 않는다고하는 전역변수, 프랜드함수 때문인걸로 알고있는데..

Do you think that's the air you are breathing now?

ㅡ,.ㅡ;;의 이미지

운형 wrote:
oop에서 위험하다고 하는 건... 메쏘드 없이 접근하게되는 전역변수에 대한 이야기가 아닐까요.?
C++이 완벽하게 oop개념을 따르지 않는다고하는 전역변수, 프랜드함수 때문인걸로 알고있는데..

전역변수가 위험하다고 생각해본적은 별로 없는데..
설사oop에서 메쏘드로 접근한다해도 위험하긴 마찬가지 아닌가요..
그리고 C에서도 전역변수 안쓰고 메쏘드로해도 됩니다.
함수내부 static 변수 만들어두고 하면되죠..
그러나 왜그렇게 잘안할까요.. ? 그정도로 위험하지도 않고..
전역변수가 편하고 간단하기때문이죠..그러나 불필요한전역은 안쓰는게 좋죠.
리소스차원에서 손해.. 변수명고갈..ㅡㅡ;;


----------------------------------------------------------------------------

운형의 이미지

ㅡ,.ㅡ;; wrote:
전역변수가 위험하다고 생각해본적은 별로 없는데..
설사oop에서 메쏘드로 접근한다해도 위험하긴 마찬가지 아닌가요..
전역변수가 편하고 간단하기때문이죠..그러나 불필요한전역은 안쓰는게 좋죠.
리소스차원에서 손해.. 변수명고갈..ㅡㅡ;;

전역변수는 쓰면 편하죠. 고민할거 줄고, 소프트웨어에 버그 있는데, 전역변수 하나 쓰면 간편히 해결되는... 문제는 혼자 단기간에 진행하는 프로젝트에서나 이말이 통한다는데 있습니다.
여러명이 장기간에 걸쳐 수정하고 또 수정하는 케이스가 되면 전역 변수때문에 애먹는 경우가 많습니다. 특히 여러개의 프로세스(간만에 써보는 단어네요. 거의 테스크라고 쓰는 상황인데...)가 데이터를 공유하면 더더욱... 대부분 전역 변수라는 것이 데이터를 저장한다기보다는 특정한 상태를 표시하는 플래그로 쓰이고(이것도 제경우만 그런가요.?? 스테이트 머신 돌리는 구조에서는 상당부분 접하는 경우라고 생각합니다.) 여기저기서 이 값에 마구 접근한다며 bug's life가 되기 쉽상...

아.. 그리고 위에 제가 쓴건 oop 개념 신봉자(? 어감이 영...)들이 C++은 진정한 객체지향이 아니라고 하는 이유를 말씀드린 거구요. 전역 변수에대한 생각을 그렇게 가지고 있다는 거죠.

주제에서 벗어난 이야기지만... 소프트웨어를 정의하라면 버그의 집합을 살짝 래핑해놓은 것이라고 하고 싶습니다.

Do you think that's the air you are breathing now?

죠커의 이미지

전역 변수, 지역 변수라는 개념은 C언어의 개념이 아니라서 무효입니다. :-)

아예 주제에서 벗어나서 C언어의 단점을 얘기하자면 완전한 구조적 프로그래밍이 불가능 한 것이 C언어의 단점으로 뽑겠습니다.

아마도 순수 구조적 프로그래밍이 가능했다면 OOP 맹신론자들의 맹목적인 비난을 더 쉽게 피할 수 있었을 것입니다. (사실 대부분의 초급 OOP서적은 포함된 소스를 이용 재귀적으로 자기비판을 할 수 있습니다만...)

Necromancer의 이미지

전역변수....... -_-;;

C로 프로그램 짜는 모 프로젝트에서
소스 분석할때 전역변수에 웬 플래그가 많은지...
나중에 다른 팀원한테 물어도 그 플래그가 머하는건지 모른답니다 -_-;;

여튼 그 프로젝트 할때 대충 감되는대로 짜서 갖다주다가
사고터지면 그거 땜방만 했습니다. orz

Written By the Black Knight of Destruction

hanzo69의 이미지

Quote:
여기 "쓰래드"에서 많은 분들이 답변을 올리시고 있지만 대부분은 "추측"에 지나치지 않나 생각합니다.

그 원인은 책이 잘못되고 잘못된 문제를 내고 있기 때문입니다.

잘못된 책을 보고 잘못된 질문을 올리셨고 많은 사람들은 잘못된 답변을 올리고 있습니다.

추측으로 시작해서 추측으로 끝나는 문제는 분쟁의 원인만 되지 않나 우려가 듭니다. 책의 저자가 이 쓰래드를 나중에 보고 "낚았다"라고 생각하지 않을까요?

동감-_-; 하하하

님ㅎ 즐~

nytereider의 이미지

프로그래밍 언어론을 배운지 2년이 넘어서 기억이 가물가물하지만...

C++는 C와 호환이 100% 되지는 않는다고 하더군요. -_-
물론, C++ 프로그램을 C에서 컴파일 안된다는 당연한 소리 말고...
C프로그램을 C++에서 컴파일 할 때에 C컴파일러와 C++컴파일러와 엄밀히 말해서 다른 부분이 존재한다고 했던걸로 기억합니다. -_-;;

뭐가 다른지는 이제 다 까먹었지만. (에효)

그런데...ObjC가 강점으로 내세우는게 바로 C와 완벽한 호환이라고 하더군요.
C++는 "객체 지향의 보다 나은 C"지만, ObjC는 "C + 객체 지향 구조"이기 때문이라고 하던데...크흠.

그나저나 어떻게 다른지 알려주실분???

doldori의 이미지

nytereider wrote:
그나저나 어떻게 다른지 알려주실분???

http://bbs.kldp.org/viewtopic.php?p=236611&highlight=#236611
쎄피로의 이미지

저도 프로그래밍 언어 수업을 지금 듣고 있고

아마 같은 책 같내요. 복습 문제에 그 문제가 있죠

책을 잘 찾아보시면 나올겁니다.

답은 성능입니다. 퍼포먼스? 던가요..-_-

그걸 유지하면서.. 모 그런 내용이 적혀 있던걸로 기억나요

움...

세상은 넓고, 할 일은 많은데, 난 숨만 쉬고 있니?

댓글 달기

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