본문 바로가기

프로그래머/프로그래밍 이야기

[지식in] c, c++ , visual c++ 의 차이점은 무엇입니까?

반응형
singlet 2003.06.10 12:34
menijks 님의 답변 중에 오류가 너무 많아서 -_-; 좀 적습니다. 그래도 어쨌건 답변으로 다는 이상 간단히 질문자분의 질문에 답을 쓰자면...

C/C++ : 컴퓨터 언어의 일종입니다.
Visual C++ : C++ 을 사용한 윈도 프로그래밍용의 개발 도구입니다.
Visual C : 본인이 아는 한 이런 건 없습니다.

C/C++ 과 Visual C++ 은 한국어와 한국인만큼이나 그 차이가 큽니다. --;

C 는 (menijks 님의 답변에 나오듯) 벨 연구소에서 리치 등이 개발한, 구조화 프로그래밍을 지원하는 범용의 고급 언어입니다. UNIX 가 대부분 C 로 짜여져 있다는 건 유명한 얘기이며, 간단한 언어 구조에도 불구하고 하드웨어의 세밀한 제어서부터 복잡한 수치분석에 이르기까지 C 로 못할 것이 거의 없다고 할 만큼 강력한 언어입니다. 역사가 길고 대단히 널리 사용되어 왔기 때문에 수많은 사용자들을 확보하고 있다는 점 또한 C 의 강점 중 하나입니다. 그러나 객체지향 프로그래밍 등의 현대적 프로그래밍 기법들을 직접 지원하지 않기 때문에, C 만으로 거대한 프로그램을 개발하기란 쉽지만은 않습니다.

C++ 은 C 에서 파생되어 나온 자식 언어로서, 객체지향 프로그래밍과 Generic Programming 등의 현대적인 기법들을 지원하는 C 언어의 확장판입니다. C++ 의 개발자 Bjarne Stroustrup (앞으로 BS 라고 약칭합니다) 의 말에 따르자면 C++ 은 '가능한 한도까지, 그러나 그만큼만 C 와 닮도록' (as close as possible to C, but no closer) 만들어졌으며, 그 결과 표준 C 의 대부분 구문들은 C++ 에서도 그대로 받아들여집니다. (표준 C 에는 반대로 C++ 에서 역수입된 구문들도 일부 있습니다) 그래서 C 프로그램인 동시에 C++ 프로그램인 경우도 드물지 않을 만큼 C 와 닮은 꼴인 C++ 의 언어 특성은 C 를 이미 알고 있던 기존 프로그래머들에게 편리한 환경을 제공하며, 새로 지원되는 현대적 기법들은 더 강력한 프로그램을 더 편하게 개발할 수 있도록 합니다. (라고 적어도 BS 는 주장합니다. ^^;) 그러나 확장 과정에서 도입된 수많은 기능들로 인해 C 보다 훨씬 방대해진 언어 규정들과, 최근에서야 이루어진 늦은 표준화, 그리고 표준을 무시해 왔던(또는 적어도 그렇게 비난받았던) 일부 컴파일러 제작사의 행보 등으로 인해 아직 C 의 자리를 완전히 대체하지는 못하고 있습니다. --- 물론 앞으로 완전히 대체할 수 있을지는 두고 봐야 할 일이지요.

뭐 그다지 충분치는 않은 소개입니다만 이 정도로 마치고(답변채택은 안하셔도 무방합니다 ^^;), 원래 목적이었던 ^^; 답변 오류 지적으로 넘어갑니다.

* C 언어는 도스용, C++ 언어는 윈도용?
아닙니다. 도스가 나왔을 때에는 C++ 언어가 아직 초창기였기에 도스용 C++ 컴파일러가 부족... 이라기보다는 거의 없었으며, 윈도가 나온 뒤에는 윈도용의 강력한 개발도구들이 C++ 언어 기반으로 만들어졌다는(그리고 그 중에서도 특히 MS 가 만든 개발 도구인 Visual C++ 이 그렇다는) 역사적 상황 때문에 도스에서 C 를, 윈도에서 C++ 을 많이 썼을 따름입니다. 도스에서 C++ 프로그래밍하는 것도, 윈도에서 C 프로그래밍하는 것도 얼마든지 가능하며 또 실제로 행해지는 일입니다. (물론 도스용 프로그램은 이제 거의 만들어지질 않습니다만 ^^;) 물론 다른 OS 는 더 말할 나위도 없습니다.

* C 언어는 시스템 기술용?
아닙니다. C 언어는 범용 언어입니다. 물론 맨 처음에 시스템 프로그래밍에 사용된 것은 사실입니다만 처음의 용도가 그 용도의 전부는 아니죠. 시스템 커널에서부터 응용 프로그램까지 거의 전부가 C 로 쓰여지곤 하는 *NIX 세계에서는 상당히 황당스런 내용이 아닐 수 없습니다. -_-;

* C 언어는 영문 소문자 집합을 바탕으로 한다?
모든 C/C++ 프로그래머들이 알고 있듯이 사실이 아닙니다. 어쩌다 이런 기초적인 오류가 들어갔는지 모르겠군요. C/C++ 은 대소문자 모두 사용하며 그 차이를 구분합니다.

* C++ 이 객체 지향형 프로그래밍 언어?
아닙니다. 이 설명은 발달 초기의 C++ 에 대해서는 일부 옳을 수도 있지만, 지금의 표준 C++ 은 객체 지향 외에도 여러 다른 프로그래밍 기법을 지원합니다. BS 는 이런 이유로 C++ 이 multiparadigm language 라고 말하며, 객체 지향은 C++ 을 이용할 수 있는 한 방법에 불과합니다. (너무나도 자주 듣게 되는 오류이기 때문에 BS 의 FAQ 를 링크합니다. Is C++ an Object-Oriented language?)

* C++ 이 C 언어 사양을 완전히 만족한다?
거의 사실이지만 정확히 말해 틀립니다. C 가 아닌 C++ 프로그램이나 반대로 C++ 이 아닌 C 프로그램, 심지어는 C 이고 C++ 이지만 C 로 해석하느냐 C++ 로 해석하느냐에 따라 서로 다른 동작을 하는 프로그램을 만드는 것마저도 가능합니다. C++ 은 C 를 개량한 독립적인 언어일 뿐 확장된 C 가 아닙니다. (역시 자주 듣는 오해이므로 BS 의 FAQ 를 링크합니다. Is C a subset of C++?)

* iostream.h ?
표준화 이전의 구형 C++ 얘깁니다. 표준 C++ 은 iostream (네. 확장자가 전혀 없습니다.) 을 씁니다.

* C++ 확장자는 .CPP?
아닙니다. 도스 및 윈도에서 흔히 쓰이는 관행일 뿐입니다. 컴파일러에 따라 멋대로인 경향이 있습니다만 흔히 .cc, .cpp, .c++, .C (대문자입니다. 대소문자를 구별하는 운영체제의 경우 C 소스는 .c, C++ 소스는 .C 로 구분하기도 합니다. 물론 도스나 윈도에서는 쓸 수 없는 방법이지만요. 그럭저럭 이름이 꽤 알려진 편인 ROOT 라는 입자물리용 C++ 툴에서는 이 방법을 즐겨 씁니다) 등 사이에서 적당히 골라 씁니다. 예를 들어 본인은 도스 및 윈도에서는 거의 프로그래밍하지 않기 때문에 좀 더 짧은 .cc (^^;) 를 선호하는 편입니다. 그 외에도 .icc.tcc 니 등등의 해괴한(?) 확장자가 등장하는 경우도 심심찮게 볼 수 있습니다. 간단히 한 마디로 줄여, C++ 의 확장자는 표준에건 관행에건 간에 하나로 통일돼 있지 않습니다.

* 자동변수가 블록을 벗어나면 소멸된다는 점이 C 와 C++ 의 차이?
이 역시, 왜 이런 말이 나왔는지 모르겠군요. 자동변수는 C 에서건 C++ 에서건 간에 블록을 벗어나면 소멸됩니다.

* 비주얼 C++ 이 언어?
위에 썼듯, 아닙니다. 다시 말하지만 C/C++ 같은 프로그래밍 언어와 Visual C++ 같은 프로그래밍 도구는 한국어와 한국인만큼이나 차이가 큽니다.

* 4GL 이 윈도우용 프로그래밍 4가지?
4th Generation Language 의 약자입니다. 4세대 언어라는 뜻이지요. -_-;

----
객체지향을 지원하면 객체지향형 언어라 불러도 된다는 문제제기가 들어왔군요.

그렇게 정의하고자 한다면 그럴 수도 있겠습니다. 하지만 구버전 비표준 Visual C++ 에서의 OOP 정도가 C++ 의 전부인 것처럼 말해지는 경우가 워낙 잦기 때문에 (심지어 경험있는 전문개발자들조차도 비 OO 적인 C++ 의 특성에 대해서는 무지한 경우도 적지 않습니다) 그 점을 강조하기 위해 위와 같이 답한 것입니다. 또한 차에 비유하자면 "승객석이 있으면 승용차" 라는 식의, 너무나 범위가 넓고 불분명한 개념이라는 것이 답변자의 의견입니다.
사실 FAQ 에 들어있을 만큼이나 이런 논란은 인터넷에서 워낙 끊이지 않고 터지곤 했던 별 소득없는 싸움이었기에 여기에서 그 사례를 굳이 하나 더 추가할 필요는 없을 겁니다. 게다가 C++ 이 그저 OOP 언어일 뿐이라는 오해만 불식된다면 C++ 이 정확히 OOP 언어건 아니건 본인으로서는 별 관심도 없기에 ^^; 답변 의도와 본인의 의견을 밝혀두는 정도로 문제제기에 대한 답은 마칩니다.
<
반응형