소개
강의
수강평
- 홍정모의 따라하며 배우는 C언어
게시글
질문&답변
반복문에서 증감식( i++와 ++i 차이)
예전에는 ++i가 i++보다 더 빠르다는 얘기가 있어서 ++i를 사용하는 예제들도 꽤 많습니다. (옛날 교과서)요즘은 컴파일러 좋아져서 이런 소소한 부분은 컴파일러가 알아서 최적화해주는 것이 더 빠르기 때문에 신경쓰지 않습니다. (주의: ++i와 i++가 의미가 다른 경우도 있어요. 강의에 나옵니다.)저는 이렇게 할 수도 있다는 것을 보여드리기 위해서 종종 섞어 씁니다.
- 1
- 2
- 38
질문&답변
공부방식에 대해
제 유튜브에 C++ 요약 3시간 강의 있으니까 그것부터 빠르게 먼저 보면서 틀을 잡고 다시 와서 보시는 것을 권장합니다. 게임 만들기 연습문제 패키지는 더이상 관리를 하지 않고 있습니다.
- 1
- 2
- 253
질문&답변
캐스팅에 대해 질문이 있습니다.
안녕하세요? 여기서 C++ 스타일이라고 얘기한 것은 C언어 공부한 학생들에게 C++에서는 문법에 차이가 있다는 의미입니다.간단히 얘기하면 C에서는 int a = int(3.4);이 컴파일이 안됩니다.어떤 종류의 캐스팅인지 더 구체적으로 적어놓으면 당연히 좋겠죠. 더 구체적으로 적을 수 있으니 구체적으로 적는 것이 C++ 스타일이라고 말하는 것도 말이 됩니다. 그렇다면 C++에서 int a = int(3.4);를 사용하는 것이 C스타일인가? 정작 C에서는 컴파일이 안되는데? 그리고 C++에서 컴파일이 되는거면 다 C++ 스타일이라고 봐야 하는거 아닌가? 이런 얘기도 나올 수 있을 정도로 복잡한 상황입니다.그러나 원론적으로는 생각하시는 대로 C++에서는 어떤 종류의 형변환인지를 더 구체적으로 지정해줄 수 있으니까 적어주면 좋은 것은 맞습니다. 실무 코드나 유명한 오픈소스에서도 항상 static_cast를 쓰는 것은 아닙니다. 이런 현상이 C언어 사용자로부터 오는 관성 때문인지 아니면 C++에서도 'C-style' cast를 써도 된다고 보는 것인지 까지는 모르겠습니다. 하지만 만약에 C++ 커뮤니티에다가 꼭 어떻게 해야만 한다라고 압박하는 얘기가 나오면 대부분의 경우 논란이 꽤 있을겁니다.아래 링크가 원 교재 링크입니다. 원 교재에는 C++ 스타일이라는 표현이 사라졌는데 제가 강의를 만들면서 오류가 생긴 것인지 아니면 그사이에 원 교재가 수정되었는지는 잘 모르겠네요.https://www.learncpp.com/cpp-tutorial/explicit-type-conversion-casting-and-static-cast/ 2.static_cast와 나머지 방식이 차이가 없다고 얘기한 것이 아니라 int(4.0)과 static_cast(4.0)의 결과에 차이가 없다는 얘기였습니다. 제가 들어도 표현이 애매한 면이 있긴 합니다. 링크 글에서 정확히 어느 부분을 얘기하시는 것인지는 모르겠는데 일단 제가 추측해보건데 중간에static_cast - Effectively this converts an object from one type to another. Note this can change the value (static_cast(1) doesn't have the same bit pattern as 1 for instance).의 얘기는 static_cast(1) -> float 1.0f 과 정수 1이 비트 배열이 다르다는 얘기입니다. 4.Stroustrup글에서 What good is static_cast? 부분만 읽어보았는데, 잘 보시면 새로운 스타일이 추가가 되었다는 표현이 있고 새로 추가된 것이 C++ 스타일이라는 표현은 없습니다. 일반적으로 좋은 C++ 프로그래밍 스타일은 형변환을 할 때 프로그래머의 의도가 무엇인지를 컴파일러에게 떠넘기지 않고 코드에 잘 적어놓는 것이겠죠. 유교경전 문구 가지고 옥신각신 싸우는 것은 의미가 없다고 생각합니다만, C++ 스타일이 뭐냐라고 딱 정리하기는 여전히 쉽지 않은 것으로 알고 있습니다. (보통 우리 회사는 이렇게 한다 정도로 합의) 4.If there is exactly one expression in parentheses, this cast expression is exactly equivalent to the corresponding C-style cast expression. 혹시 도움될까 해서 덧붙이자면, 미국 애들끼리는 대화하면서 이런거 꼬치꼬치 따지고 고쳐주고 하는 경우가 많습니다. 가상의 예시) "I think A is B", "No, A is equivalent to B" 이런 대화가 많습니다. 이렇게 꼼꼼히 따져가면서 공부하시는 것은 개인에게는 당연히 좋은 일입니다만, 이 강의의 목표는 문법 자체를 꼼꼼히 익히는 것이 아니라는 점을 어느정도 감안을 하고 보셔야할 것 같습니다. 강의에 부족한 점이나 오류가 없다는 얘기는 아닙니다. 제가 언어 전공자가 아니라는 점도 한계가 있는 것 같고 개인적인 지향성도 응용 분야 쪽이라는 점도 영향이 있을 것 같습니다. 참고로 프로그래밍 언어 자체를 전공하신 분들도 계시니까 엄밀한 공부를 원하신다면 그런 분들의 강의나 교재를 보시는 방법도 있을 것 같습니다. 원 교재 같은 경우 예전에는 레딧에서 learncpp 보고 공부한 사람 걸러라 라는 얘기도 있었는데 최근에는 오랜 기간 동안 엄격한 검증을 거쳤기 때문에 많이 개선되었을 것으로 생각됩니다. 두 분이 좀 더 옥신각신 하시는 것도 좋은 의사소통 연습이 될거라고 봅니다. 저는 제가 항상 옳은 것은 아니라는 얘기를 하려다가 좀 길어졌네요.
- 1
- 2
- 283
질문&답변
10분 15초경 질문
원 질문글에 대한 답변이 틀린 부분이 있어서 수정해 놓았습니다.간단히 요약하면 C언어에서 배열 대입을 안해주기 때문입니다.제가 틀린 부분은 이 오류는 Text segment가 read-only인 것과는 상관 없다는 점입니다. 부연 설명도 같이 적어놨습니다.아래 AI 자동 답변은 저와 무관합니다.
- 2
- 2
- 325
질문&답변
(강의 10:21) 배열의 이름 dest에 "Start something"을 대입하는 것이 안되는 이유
안녕하세요? 오랫만에 이 질문에 대해 다시 질문이 들어와서 봤는데, 아래 답변에 잘못된 부분이 있어서 수정하겠습니다.gcc에서 아래 코드를 컴파일하려고 시도하면char dest[100] = "";dest = "Do Something";error: assignment to expression with array type배열에 대입하려고 시도했다는 에러가 발생합니다.C언어에서는 배열의 값을 바꾸고 싶을때 간단한 대입을 사용할 수 없습니다.strcpy, memcpy로 메모리 블럭을 복사하거나 아니면 for문으로 하나씩 대입해야 합니다.우리 입장에서는 그냥 좀 해주지 싶겠지만 C언어를 설계하신 분들 입장에서는 사용자가 해야할 일이라고 판단하신 것으로 추측됩니다.반면에 초기화할때는 가능합니다.char dest[100] = "Do Something"; // 그 다음은 제가 답변드리면서 헷갈렸던 사안인데,char *a = "Do Something";a[0] = 'A'; // printf("%s\n", a); // 이 부분은 강의 다른 부분에 설명이 있었을텐데 "Do something"은 프로그램의 일부로써 read-only 읽기 전용 영역에 들어있기 때문에 변경 시도가 어떤 문제를 만드는 것입니다. 반면에 아래 코드는 정상작동합니다. 왜냐하면 dest 배열이 스택에 수정가능한 메모리를 갖고 있고 거기에 "Do something"이 복사되어 있는 상황이라서 dest[0]으로 한 글자를 수정할 수 있습니다.char dest[100] = "Do Something";dest[0] = 'A';printf("%s\n", dest); 다시 원래 질문글로 돌아오면,error C2106: '=': left operand must be l-valueVS의 컴파일러에서 제공해주는 에러 메시지가 모호했던 것 같습니다.저는 문법 확인용으로 gcc를 급하게 사용하고 싶을 때 온라인 컴파일러를 사용합니다. 아래 캡쳐 화면 참고하세요.(사진)
- 1
- 2
- 470
질문&답변
다중 상속 시 부모 클래스 간 생성자 호출 순서가 궁금합니다.
아 그리고 이런 생성자 호출 순서를 고려해야 하는 작업이 있나요? 객체지향적으로 설계한다면 생성자의 호출 순서에 따라 결과가 바뀌도록 설계하진 않을 것 같아서요.-> 이상적으로는 그렇게 생각하실 수 있지만, 실제로는 그런것들까지 고려해서 작성합니다. C++을 사용할 때는 (보통) 성능을 위해 다른 요소들을 희생시키는 경우가 많습니다. (예: 비숙련자를 위한 API 편의성)
- 1
- 2
- 446
질문&답변
vsc반드시깔아야하나요
오해가 있었던 것 같은데 VSCode 사용법은 간혹 VSCode를 쓰고 싶어하는 분들이 계셔서 추가한 것이고 초보자에게는 Visual Studio 권장합니다.
- 1
- 1
- 310
질문&답변
mingw-w64 폴더 설치 중 에러
잘하셨어요. 초보때는 이것저것 해보시는 과정이 필요합니다.
- 2
- 1
- 294
질문&답변
공부방식
안녕하세요? 보통 프로그래밍 입문 자체는 파이썬이나 C언어로 하시는 경우가 많고 C++은 문법이 까다로워서 어려움을 느끼시는 분들이 많습니다. 이 강의는 C++ 문법 강의에 조금 더 가깝다고 보셔야 합니다.그러나, 문법을 그냥 다 외우는 방식은 아니고 맘 편하게 강의 따라가면서 이것저것 해보다 보면 익숙해지는 방식입니다. 암기에 대해 너무 부담을 느끼지 않으셨으면 좋겠습니다. 궁극적인 프로그래밍 실력의 완성은 자기가 만들고 싶은 아이디어를 구현하기 위해서 이것 저것 찾아다니면서 이뤄집니다. 한국에서는 허수 지원자가 너무 많다 보니 1차로 걸러내기 위해 코테를 사용합니다. 이 과정에 오해가 생겨서 문제 풀이가 중요하다고 생각하시는 학생들이 많은데, 전통 대기업들은 어차피 학력이 좋은 지원자들이 입사하게 되기 때문에 코테가 최소한의 지능 검사처럼 되었고 IT 대기업들 같은 경우는 2차 코테나 코딩 인터뷰(코테와 성격이 다름) 등으로 실제로 깊이 들어가서 구현해본 적이 있는지를 철저하게 걸러냅니다. 그 외에 일단 어디든 붙었으면 좋겠다 정도로 준비하시는 분들은 오히려 고시공부하는 수준으로 자신을 빠르게 성장시키는 시간을 가지셔야 합니다.(프로그래밍 입문이 아니라) C++ 문법 강의 관점에서 봤을 때는 제 강의 조차도 양이 많은 편은 아닙니다. 전문 소프트웨어 엔지니어를 꿈꾸신다면 학습량과 학습속도 자체를 올리실 필요가 있습니다. 대신에 중고등학교 공부하시듯이 하나하나 다 기록하고 외우려고 하시기 보다는 한 번씩 따라해보는 정도로 빠르게 진행하시면 됩니다.뭔가 만들어보기 시작하면 당연히 막막할텐데 그 막막함 속에서 뭔가 찾아가는 능력을 갖추시면 인생이 달라집니다. 문법은 생각 안나면 검색해보거나 다시 강의를 찾아 보거나 하면서 헤매는 경험을 조금 하시다 보면 의외로 빠르게 능숙해집니다.원하시는 바를 이루시는 데에 도움이 되기를 바랍니다.
- 1
- 2
- 346
질문&답변
너무 옛날 강의 ..
안녕하세요? 다른 수강생 분들에게 답을 받고 싶으실 것 같은데, 다른 수강생분들이 답글 달아주시는 경우가 흔치 않아서 일단 저라도 답을 달아드리겠습니다.제가 파이썬, 그래픽스 등의 다른 강의들을 계속 만들고 있어서 트렌드는 계속 분석을 하고 있습니다.단점부터 알려드리자면, 이 강의는 처음 만든 강의라서 기본적으로 음질과 화질이 조금 떨어집니다. 따배씨를 포함한 후속 강의들에서는 음질/화질 문제가 제기된 적이 없습니다.지금 생각하면 처음이라서 어이없을 정도로 자세하고 많은 분량의 강의를 무모하게 만들 수 있었습니다. 재녹화를 한다면 파트 3개 정도로 분할을 하게 될 것으로 예상됩니다. (가격도 3배 정도가 되겠죠.)강의 난이도나 범위는 지금 새로 시작하시는 학생들에게도 적절합니다. 녹화 당시 모던 C++라고 하면 C++14 정도를 변곡점으로 삼았는데 이 강의는 초보자가 공부할만한 내용들은 모두 다루고 있습니다. C++ 20 이후의 최신 내용들은 어느정도 숙련된 후에 별도로 공부하시는 것이 올바른 순서입니다.완강한 수강생만 이미 수백명이라서 검증이 끝났고 세세한 질문답변이 누적되어 있다는 점은 어떤 분들에게는 무조건적인 선택의 이유가 되기도 합니다.가르치는 방법은 취향에 따라 호불호가 있을 수 있는데, 이 강의는 하나하나 다 설명해드리는 방식입니다.마음 같아서는 따배씨++도 재녹화를 하면 좋겠지만, 내용을 굳이 개선해야 할 필요가 없는 상황에서 음질/화질 때문에 재녹화하기에는 너무 일이 크기도 하고 기존 수강생들은 같은 시간에 새로운 강의 제작을 강하게 요구하셔서 당분간은 따배씨++를 재녹화하기는 어려울 것 같습니다. 따배씨++는 그 자체로도 강점이 있는 강의라서 제가 C++ 강의를 다시 만든다면 (수강생들이 선택의 폭을 넓힐 수 있도록) 따배씨++를 그대로 리메이크 하기 보다는 새로운 스타일로 별도의 강의를 제작하게 될 것 같습니다.강의 선택에 어려움이 느껴지신다면 앞 부분 샘플부터 확인해보시면 좋은 선택을 하는 데에 도움이 될 것 같습니다.
- 1
- 2
- 269