C ++를 배우기 전에 C를 배워야합니까? [닫은]


116

나는 오늘 열린 대학 CS 부서를 방문했고 랩 투어에서 우리는 학부생의 마지막 학년 프로젝트 몇 가지를 가지고 놀았습니다. 하나는 특히 좋았습니다. 일종의 FPS 소행성 게임이었습니다. 나는 src디렉토리를 들여다 보고 그것이 C ++로 이루어 졌다는 것을 알아 내기 로 결정했다 (대부분의 다른 프로젝트는 자바 3D 앱이었다).

전에 C를 해본 적이 없지만 전에 C 코드를 살펴 보았습니다. 이 게임의 .cpp 코드에서 본 것과 크게 다르지 않았습니다.

저는 C 또는 C ++를 배우는 데 관심이 있지만 나중에 다른 것을 배우게 될 것입니다. 내가 다른 이전에 하나의 학습에 어떤 이점이 있습니까그렇다면, 하나는?



7
정말 중복이 아닙니다. 암시 적으로이 질문은 "나는 OOP 또는 첫번째 절차 적 프로그래밍을 배워야한다"요청
bobobobo

2
아래 답변으로 내려 가기 전에 (IMO는 원으로 이동합니다) 몇 가지 조언을 제공하겠습니다. TRUE : C ++ C에 적용된 모든 기능과 속성을 유지하므로 암시 적으로 ' 구식 'C (아래 답변의 대부분은 try 만들다). 그러나이 : C는 하지 , 하지 , NOT DEAD. 사람들은 사랑하는 삶을 위해 ' 둘 다 배울 필요가 없다 '는 비유 를 붙잡는 것 같지만 실제로 이것은 근거가 없습니다. C에서 차용 구문 원래하려면 C ++! = C . C ++를 안다고해서 자격을 갖춘 C 개발자가되는 것은 아니며, 마찬가지로 C를 안다고해서 자격을 갖춘 C ++ 개발자가되는 것은 아닙니다.
슈퍼 캣

4
말했다 : 거기 NO 피해 C ++로 살펴보기 전에 C에 복용이 - 더 당신이 더 나은 당신이 알고있다 - 그러나 반대로, 없다 당신이있는 거 궁극적 인 목표는 C ++를 배울 경우 C를 배울 필요가 . 당신은 C를 배우고 싶다면 ++, C ++을 배우고 가서 , 당신은 t가, C를 배우고 싶은 경우에 C를 배우고 가서 . 둘 다 장단점이 있으며 (C의 단순함과 C ++의 심층적 인 기능은 모두 저주이자 축복입니다) 오늘날에도 여전히 사용되고 있습니다 (임베디드 시스템, Unity, PHP 등의 경우 C-C ++ 또한 Unity, Unreal 등).
Super Cat

3
포인트 : C ++를 배우고 싶으세요? 그런 다음 C를 건너 뜁니다. 필요하지 않습니다. C를 배우고 싶습니까? 그럼 좋아, C 를 배우십시오. 둘 다 배우고 싶다면 먼저 C로 가십시오. 둘 다 세상에 자신의 자리가 있으므로 둘 중 하나가 다른 사람에게 충분하다고 생각하지 마십시오.
슈퍼 고양이

답변:


121

C ++를 배우기 전에 C를 배울 필요가 없습니다.

그들은 다른 언어 입니다. C ++가 어떤 식 으로든 C에 의존하고 완전히 지정된 언어가 아니라는 것은 일반적인 오해입니다.

C ++가 동일한 구문과 동일한 의미를 많이 공유한다고해서 C를 먼저 배워야하는 것은 아닙니다.

C ++를 배우면 결국에는 시간이 지남에 따라 배우게 될 언어간에 약간의 차이가있는 대부분의 C를 배우게됩니다. 사실 중급 C ++ 프로그래머는 C / C ++를 작성하는 경향이 있기 때문에 적절한 C ++를 작성하기가 매우 어렵습니다. C로 시작 했든 C ++로 시작하든 상관 없습니다.

C를 먼저 알고 있다면 C ++를 배우는 데 도움이됩니다. 언어의 덩어리를 아는 것으로 시작합니다. 먼저 C를 모르면 다른 언어에 집중할 필요가 없습니다. 아무것도 모르는 상태에서 시작하고 C ++에도 적용되는 C에서 배울 수있는 모든 것을 다룰 수있는 좋은 책과 튜토리얼이 많이 있습니다.

이 답변에서 추가 추론을 참조하십시오 .


33
나는 더 이상 동의 할 수 없었다. C ++를 먼저 배우면 C로 "돌아가는"매우 어려운 경험을 할 수 있습니다. C는 기본적이고 기본적인 시스템 언어입니다. C ++는 완전히 새로운 볼 게임이며, 두 언어의 문제에 대한 접근 방식은 크게 다릅니다. 나는 C ++ 작업에 뛰어 들기 전에 C를 만져 볼만큼 운이 좋았다. 그 후 저는 C ++가 제공하는 구문 적 설탕을 정신적으로 "끓일"수 있고 어느 언어로든 문제에 접근 할 수 있습니다. C를 언어 쌍의 "일을하는"부분으로 식별하는 것은 매우 쉽습니다. C ++를 먼저 배우면 프로그래머가 혼란스럽고 오해하게됩니다.
Matt Joiner

24
@Matt : 저는 C ++를 먼저 배웠고 저는 잘못된 프로그래머가 아닙니다. 따라서 귀하의 주장은 사실이 아닙니다. 그리고 예, C에도 금색 배지가 있습니다. 문제의 진실은 두 언어가 서로 다른 언어라는 것입니다. 다른 언어를 배우기 위해 한 언어가 종속성으로 필요하지 않습니다. 그것은 단지 어리석은 오해입니다.
Brian R. Bondy 2010-06-23

8
@Matt : 또한 저의 링크 된 게시물에서 : C를 먼저 배워야합니다. C를 먼저 배우면 상처를 입기 때문이 아니라, 아무것도 배우지 못하기 때문이 아니라 C를 먼저 배우는 데 이점이 없기 때문입니다. C ++에 어느 정도 포함되어 있기 때문에 결국 C에 대한 모든 것을 배우게 될 것입니다.
Brian R. Bondy 2010-06-23

11
@Matt : 아직도 이해하지 못해 죄송합니다. C와 C ++의 벤 다이어그램을 그리고 교차하는 부분을 살펴보세요. C ++는 교차하지 않는 부분뿐만 아니라 그리는 전체 C ++ 원으로 구성됩니다. C를 먼저 알게된다면 좋을 것입니다. C ++를 더 빨리 배울 수 있습니다. C를 먼저 알지 못한다면 먼저 배울 이유가 없습니다. C ++에 관한 모든 책이 포인터와 메모리 관리, 문자열 리터럴 등을 다루지 않을 것이라고 생각하십니까? 나는 지금 논의를 그만 둘 것입니다. 그러나 여러분의 마지막 코멘트를 남겨주세요.
Brian R. Bondy 2010-06-23

11
@Matt : C는 어떻게 C ++를 더 잘 이해하게하나요? 일반적으로 C ++를 배우는 C 프로그래머는 추악하고 오류가 발생하기 쉬운 "C with classes"스타일 코드를 작성합니다. 이것이 항상 발생 한다고 말하는 것은 아니지만 C로 시작할 때 가장 자연스러운 진행입니다. C는 "현대"C ++보다 C ++의 끔찍한 스타일에 훨씬 더 가깝기 때문입니다.
jalf

77

저는이 질문을 좋아합니다. "스노 보드 나 스키 중 무엇을 먼저 배워야하나요?"라고 묻는 것과 같습니다. 스노 보드를 원하든 스키를 원하느냐에 따라 다르다고 생각합니다. 두 가지를 모두 수행하려면 두 가지를 모두 배워야합니다.

두 스포츠 모두이 질문을 불러 일으킬만큼 충분히 유사한 장치를 사용하여 눈 위의 언덕을 미끄러 져 내려갑니다. 그러나 그들은 또한 충분히 다르기 때문에 하나를 배우는 것이 다른 하나에 많은 도움이되지 않습니다. C와 C ++도 마찬가지입니다. 구문이 충분히 유사한 언어로 보이지만 OO 코드와 절차 적 코드를 작성하는 데 필요한 사고 방식은 충분히 다르므로 두 번째로 배운 언어가 무엇이든 처음부터 시작해야합니다.


70

먼저 C를 배웠고 C ++를 배우기 전에 C를 사용하는 데이터 구조 과정을 수강했습니다. 이것은 나를 위해 잘 작동했습니다. C의 데이터 구조 과정은 포인터와 메모리 관리에 대한 확실한 이해를주었습니다. 또한 객체 지향 패러다임이 무엇인지 알게 된 후에는 객체 지향 패러다임의 이점도 분명해졌습니다.

반면에 C를 먼저 배우면서 포인터를 과도하게 사용하는 경우 (C ++ 참조가 가능할 때)와 전처리 기와 같이 처음에는 나쁜 C ++ 코드를 작성하게하는 몇 가지 습관을 개발했습니다.

C ++는 기능이 많은 매우 복잡한 언어입니다. 하지만 실제로 C의 상위 집합은 아닙니다. 오히려 C와 매우 유사한 기본 절차 적 프로그래밍 구조 (루프, ifs 및 함수)로 구성된 C ++의 하위 집합이 있습니다. 귀하의 경우에는 그것으로 시작한 다음 더 고급 개념까지 작업 할 것입니다. 클래스 및 템플릿처럼.

IMHO라는 가장 중요한 것은 뇌가 세상을 바라 보는 한 가지 방식으로 얼기 전에 절차 적, 객체 지향적, 기능적, 논리적과 같은 다양한 프로그래밍 패러다임에 노출되는 것입니다. 덧붙여서, Scheme과 같은 함수형 프로그래밍 언어를 배우는 것이 좋습니다. 그것은 정말로 당신의 시야를 넓힐 것입니다.


18

둘 다 배우기로 결정한 경우 (다른 사람들이 언급했듯이 둘 다 배울 필요가 없음) 먼저 C를 배우십시오. C에서 C ++로 이동하는 것은 자연스러운 진행처럼 느껴집니다. 반대쪽으로가는 것은 의도적으로 한 손을 등 뒤로 묶는 것과 같습니다. :-)


13

C를 먼저 배웠으니 먼저 C를 배워야한다고 생각합니다. C는 나에게 구문을 잘 이해하고 포인터와 같은 것들에 대한 이해를 주었다.이 모든 것이 C ++로 흘러 간다.

나는 C ++이 모든 문제를 쉽게 마무리 할 수 ​​있다고 생각한다 ([] 연산자와 어리석은 인덱스를 사용할 때 오버플로되지 않는 배열이 필요합니까? 물론 경계 검사를 수행하는 배열 클래스를 만드십시오) 그러나 당신은 무엇을 알아야합니다 특정 방식으로 일이 수행되는 이유를 이해하기 전에 그들은 그들에게 물립니다.

모든 것이 말하고 끝났을 때, C ++가 일반적으로 가르치는 방식은 "C ++는 객체가있는 C입니다. 여기에 C 항목과이 모든 OO 항목이 작동하는 방법이 있습니다."이므로 실제 C ++보다 먼저 기본 C를 배울 수 있습니다. 어쨌든 대부분의 텍스트를 따르십시오.


동의하지 않습니다. 가치있는 C ++ 프로그래밍 책은 배열의 작동 방식 (및 오버플로 방지 방법)과 같은 "고장난"의 일부를 다룰 것입니다
moonman239

12

나는 여기서 대다수에 동의하지 않을 것입니다. 난 당신이 생각 해야 ++ C를 배우기 전에 C를 배운다. 꼭 필요한 것은 아니지만 C ++ 학습이 훨씬 쉬워 진다고 생각합니다. C는 C ++의 핵심입니다. C에 대해 배우는 모든 것은 C ++에 적용 할 수 있지만 C는 훨씬 작고 배우기 쉽습니다.

K & R을 받아 읽어보세요. 짧고 언어에 대한 충분한 감각을 줄 것입니다. 포인터 및 함수 호출에 대한 기본 사항을 이해하면 C ++로 좀 더 쉽게 이동할 수 있습니다.


15
잘못된. C가 가르치는 거의 모든 것은 C ++에서 나쁜 습관입니다. C는 C ++의 핵심이 아니라 많은 구문을 공유합니다. 제발, 세상에는 이미 "클래스가있는 C"프로그래머가 충분합니다. C 또는 C ++를 배우십시오. 그러나 C가 C ++ 라이트 인 척하지 마십시오.
jalf

13
나는 내 말을지지한다. C ++는 C 위에 구축되므로 C가 핵심입니다. C ++에서 사용되는 관용구는 C에서 사용되는 관용구와 많이 다르지만 구문은 동일합니다. C로 시작하여 C ++를 프로그래밍하는 올바른 방법을 배울 수 있습니다. C ++ 입문서를보십시오. 기본적으로 그렇게합니다.
Steve Rowe

6
+1. C는 더 작은 언어이므로 배우기가 더 쉽습니다. C와 역 호환되는 시도는 C ++의 주요 문제의 원인 중 하나이며, 다른 하나는 C ++ 프로그래머의 90 %가 사용하기에는 너무 복잡한 템플릿 시스템입니다.
hillu

1
변수, 유형 (포인터 및 제한 포함), 범위, 함수, 전 처리기 및 연결에 대한 이해는 C와 C ++ 모두에 필수적입니다. C로 이러한 개념을 배우는 것이 더 쉬울 것이므로 클래스 static,, 템플릿 의 또 다른 의미 (및 컴파일러가
내놓는

1
당신은 요점이 있습니다. 사실, C를 배우는 것이 좋을 것입니다. 그래야 그 뿌리에 대한 더 나은 지식을 가지고 C ++로 넘어갈 수 있습니다.
Daniel Daranas

10

C ++를 배우는 과정에서 대부분의 C도 배우게됩니다. 그러나 많은 C ++ 코드가 유효한 C가 아님을 명심하십시오. C ++는 C 코드와 호환되도록 설계되었으므로 먼저 C ++를 배우고 싶습니다. Brian은 이것에 대해 훌륭한 답변을 썼습니다 .


8

인생의 다른 많은 질문에 대한 답변처럼 상황에 따라 다릅니다. 프로그래밍 관심사와 목표가 무엇인지에 따라 다릅니다. GUI를 사용하여 데스크톱 응용 프로그램을 프로그래밍하려면 C ++ (및 OOP)가 더 나은 방법 일 것입니다. x86 칩셋이 아닌 다른 것에 대한 하드웨어 프로그래밍에 관심이 있다면, 일반적으로 속도면에서 C가 더 나은 선택입니다. 새 미디어 플레이어를 만들거나 비즈니스 앱을 작성하려면 C ++를 선택합니다. 은하 충돌이나 유체 역학에 대한 과학적 시뮬레이션을하고 싶다면 C의 힘을 보라.


4
많은 고성능 컴퓨팅 시나리오에서 수백 개의 클록 사이클이 실제로 중요합니다.
Scottie T

1
@ScottieT : restrict지정자 C 외에 C ++보다 성능 관련 구문 / 의미 구조가 없다는 점을 감안할 때 C ++ 코드가 더 풍부한 구문과 예를 들어 메타 프로그래밍이 더 느린 코드를 생성해야한다고 생각하는 이유는 무엇입니까? 표현식 템플릿을 알고 계십니까?
Sebastian Mach

1
@phresnel : 관련성. C ++는 종종 구매할 가치가없는 기능을 가진 매우 복잡한 언어입니다. 일반적 으로 C는 훨씬 적은 비용으로 C ++ 와 동일한 성능 기회를 제공합니다 .
Matt Joiner

1
@MattJoiner : 유지 보수성 / 확장 성도 성능 요인이지만 과학 코드는 종종 원샷이라는 것을 알고 있습니다. 그러나, (예를 들어) 식 템플릿 인수를 반복, 나는 C ++가 가지고있는 말을 최적화 기회를, (한 가지 예외 (또한 고유 코드에 비해 쓰기 표현 템플릿 코드에 쉽기 때문에) restrict, 어떤 그러나 모든 주요 C ++ 컴파일러는 확장으로 제공됩니다.) 그리고 같은 코드가 주어 졌을 때 같은 컴파일러에서 C ++와 C 사이에 성능 차이가있을 것이라고 정말로 생각하십니까? [...]
세바스찬 마하

1
@MattJoiner : [...] 그리고 "내가 C ++를 싫어하는만큼"과 같은 문장을 읽을 때이 토론에서 약간 편향된 가정을 만들 수 있습니다. 정확히 무엇이 C ++ 코드의 성능을 저하 시킨다고 생각하십니까? C가 동일한 성능 기회를 가지고 있다면 표현식 템플릿, 일반적으로 템플릿, 비 내장 데이터 유형에 대한 컴파일 시간 계산, 펑터와 동등한 것은 무엇입니까? 비용 / 유지 보수 요소 추가 : RAII, 운영자 / 기능 오버로딩, 일반 표준 컨테이너, 표준 스레드, 일반 표준 알고리즘, 참조?
Sebastian Mach

8

C를 배우면 코드를 작성할 때 명시 적 및 암시 적 메모리 관리 또는 기본 데이터 유형의 저장소 크기와 같은 일부 문제에 대해 더 열심히 생각하게됩니다.

C의 기능 과 잘못된 기능에 대해 편안하게 느끼는 지점에 도달하면 C ++로 배우고 작성하는 데 어려움을 덜 겪을 것입니다.

지금까지 본 C ++ 코드가 표준 C와 크게 다르지 않았을 가능성이 있지만 이는 객체 지향이 아니고 예외, 객체 지향, 템플릿 또는 기타 고급 기능을 사용하지 않았기 때문일 수 있습니다.


8

먼저 C를 배우는 것이 좋은 생각이라고 생각합니다.

comp sci 과정이 여전히 C를 사용하는 이유가 있습니다.

제 생각에는 OOP를 요구할 의무가있는 주제의 모든 "밀집"을 피하는 것이 좋습니다.

절차 적 프로그래밍은 프로그래밍을 처음 배우는 가장 자연스러운 방법이라고 생각합니다. 나는 그것이 사실이라고 생각합니다. 왜냐하면 결국 당신이 가진 것 : 코드 줄이 차례로 실행되기 때문입니다.

오늘날 많은 텍스트는 "객체 우선"접근 방식을 추진하고 있으며 어레이를 도입하기 전에 자동차와 기어 변속에 대해 이야기하기 시작합니다.


4
요즘 많은 comp sci 코스가 Java를 사용하는 것 같습니다. 이는 당신이 말하는 문제를 더욱 악화시킵니다.
Dima

2
당신은 아주 좋은 지적을합니다. 모국어로서는 너무 복잡 할뿐만 아니라 대부분의 경우 C ++는 우수한 컴퓨터 과학 수업에 중요한 운영 체제 및 메모리와의 낮은 수준의 상호 작용을 숨기도록 권장합니다. 배열은 객체보다 오래 전에 가르쳐야합니다.
Matt Joiner

1
반면에, 당신이 수학에 나쁘지 않다면, 함수형 프로그래밍은 모양과 느낌이 더 친숙하고 작동하기 때문에 더 자연 스러울 수 있습니다.
Sebastian Mach

2
"Comp sci 과정이 여전히 C를 사용하는 이유가 있습니다." 예, 대부분의 comp sci 과정은 제대로 가르쳐지지 않기 때문입니다.
밝기 경주 궤도에

8

아니.

에펠이나 C #과 같은 가장 현대적인 OO 기반 언어에 더 가깝기 때문에 일반적으로 C ++를 배우는 것이 더 유용합니다.

목표가 C ++를 배우는 것이라면 먼저 최신 표준 C ++를 배우십시오. malloc은 따로 두십시오.


그러나 Steve Rowe 는 요점이 있습니다 ...


요즘 C ++는 C #이나 Eifel과 같은 OO 언어에 가깝지 않습니다.
einpoklum

7

Java를 먼저 배운 사람들이 C ++의 포인터 및 메모리 관리 개념으로 어려움을 겪는 것을 관찰 한 결과, C를 먼저 배우는 것이 다른 C ++의 복잡성과 분리 된이 두 개념을 이해하기위한 좋은 생각이라고 말하고 싶습니다. 풍모.


6

내 2 센트 :

C를 먼저 배우는 것이 좋습니다.

  • 기본 언어입니다. C에서 유래 한 많은 언어
  • 임베디드 시스템, GPU 칩 등 더 많은 플랫폼이 C ++보다 C 컴파일러를 지원합니다.
  • TIOBE 인덱스따르면 C는 여전히 C ++보다 약 2 배 더 인기가 있습니다.

3

저는 c가 정말 멋진 프로그래밍 언어라고 생각합니다. 간결하고 배우기 쉽습니다. 하지만 C ++ 만 배우고 싶다면 C ++로 시작하세요. 하지만 둘 다 배우는 것이 좋습니다. 그렇게하고 싶다면; c로 시작하는 것이 낫다고 생각합니다. 이전에 말했듯이 : 작고 배우기가 다소 쉽습니다. C ++와 같은 더 복잡한 프로그래밍 언어로의 좋은 단계가 될 수 있습니다. (c는 몇 가지 기본 사항을 제공하므로)

행운을 빕니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.