게시글
질문&답변
2024.02.11
10분 15초경 질문
원 질문글에 대한 답변이 틀린 부분이 있어서 수정해 놓았습니다. 간단히 요약하면 C언어에서 배열 대입을 안해주기 때문입니다. 제가 틀린 부분은 이 오류는 Text segment가 read-only인 것과는 상관 없다는 점입니다. 부연 설명도 같이 적어놨습니다. 아래 AI 자동 답변은 저와 무관합니다.
- 2
- 2
- 180
질문&답변
2024.02.11
(강의 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-value VS의 컴파일러에서 제공해주는 에러 메시지가 모호했던 것 같습니다. 저는 문법 확인용으로 gcc를 급하게 사용하고 싶을 때 온라인 컴파일러를 사용합니다. 아래 캡쳐 화면 참고하세요. (사진)
- 1
- 2
- 286
질문&답변
2024.02.06
다중 상속 시 부모 클래스 간 생성자 호출 순서가 궁금합니다.
아 그리고 이런 생성자 호출 순서를 고려해야 하는 작업이 있나요? 객체지향적으로 설계한다면 생성자의 호출 순서에 따라 결과가 바뀌도록 설계하진 않을 것 같아서요. -> 이상적으로는 그렇게 생각하실 수 있지만, 실제로는 그런것들까지 고려해서 작성합니다. C++을 사용할 때는 (보통) 성능을 위해 다른 요소들을 희생시키는 경우가 많습니다. (예: 비숙련자를 위한 API 편의성)
- 1
- 2
- 193
질문&답변
2024.01.15
vsc반드시깔아야하나요
오해가 있었던 것 같은데 VSCode 사용법은 간혹 VSCode를 쓰고 싶어하는 분들이 계셔서 추가한 것이고 초보자에게는 Visual Studio 권장합니다.
- 1
- 1
- 145
질문&답변
2023.12.25
mingw-w64 폴더 설치 중 에러
잘하셨어요. 초보때는 이것저것 해보시는 과정이 필요합니다.
- 2
- 1
- 135
질문&답변
2023.12.16
공부방식
안녕하세요? 보통 프로그래밍 입문 자체는 파이썬이나 C언어로 하시는 경우가 많고 C++은 문법이 까다로워서 어려움을 느끼시는 분들이 많습니다. 이 강의는 C++ 문법 강의에 조금 더 가깝다고 보셔야 합니다. 그러나, 문법을 그냥 다 외우는 방식은 아니고 맘 편하게 강의 따라가면서 이것저것 해보다 보면 익숙해지는 방식입니다. 암기에 대해 너무 부담을 느끼지 않으셨으면 좋겠습니다. 궁극적인 프로그래밍 실력의 완성은 자기가 만들고 싶은 아이디어를 구현하기 위해서 이것 저것 찾아다니면서 이뤄집니다. 한국에서는 허수 지원자가 너무 많다 보니 1차로 걸러내기 위해 코테를 사용합니다. 이 과정에 오해가 생겨서 문제 풀이가 중요하다고 생각하시는 학생들이 많은데, 전통 대기업들은 어차피 학력이 좋은 지원자들이 입사하게 되기 때문에 코테가 최소한의 지능 검사처럼 되었고 IT 대기업들 같은 경우는 2차 코테나 코딩 인터뷰(코테와 성격이 다름) 등으로 실제로 깊이 들어가서 구현해본 적이 있는지를 철저하게 걸러냅니다. 그 외에 일단 어디든 붙었으면 좋겠다 정도로 준비하시는 분들은 오히려 고시공부하는 수준으로 자신을 빠르게 성장시키는 시간을 가지셔야 합니다. (프로그래밍 입문이 아니라) C++ 문법 강의 관점에서 봤을 때는 제 강의 조차도 양이 많은 편은 아닙니다. 전문 소프트웨어 엔지니어를 꿈꾸신다면 학습량과 학습속도 자체를 올리실 필요가 있습니다. 대신에 중고등학교 공부하시듯이 하나하나 다 기록하고 외우려고 하시기 보다는 한 번씩 따라해보는 정도로 빠르게 진행하시면 됩니다. 뭔가 만들어보기 시작하면 당연히 막막할텐데 그 막막함 속에서 뭔가 찾아가는 능력을 갖추시면 인생이 달라집니다. 문법은 생각 안나면 검색해보거나 다시 강의를 찾아 보거나 하면서 헤매는 경험을 조금 하시다 보면 의외로 빠르게 능숙해집니다. 원하시는 바를 이루시는 데에 도움이 되기를 바랍니다.
- 1
- 2
- 201
질문&답변
2023.12.09
너무 옛날 강의 ..
안녕하세요? 다른 수강생 분들에게 답을 받고 싶으실 것 같은데, 다른 수강생분들이 답글 달아주시는 경우가 흔치 않아서 일단 저라도 답을 달아드리겠습니다. 제가 파이썬, 그래픽스 등의 다른 강의들을 계속 만들고 있어서 트렌드는 계속 분석을 하고 있습니다. 단점부터 알려드리자면, 이 강의는 처음 만든 강의라서 기본적으로 음질과 화질이 조금 떨어집니다. 따배씨를 포함한 후속 강의들에서는 음질/화질 문제가 제기된 적이 없습니다. 지금 생각하면 처음이라서 어이없을 정도로 자세하고 많은 분량의 강의를 무모하게 만들 수 있었습니다. 재녹화를 한다면 파트 3개 정도로 분할을 하게 될 것으로 예상됩니다. (가격도 3배 정도가 되겠죠.) 강의 난이도나 범위는 지금 새로 시작하시는 학생들에게도 적절합니다. 녹화 당시 모던 C++라고 하면 C++14 정도를 변곡점으로 삼았는데 이 강의는 초보자가 공부할만한 내용들은 모두 다루고 있습니다. C++ 20 이후의 최신 내용들은 어느정도 숙련된 후에 별도로 공부하시는 것이 올바른 순서입니다. 완강한 수강생만 이미 수백명이라서 검증이 끝났고 세세한 질문답변이 누적되어 있다는 점은 어떤 분들에게는 무조건적인 선택의 이유가 되기도 합니다. 가르치는 방법은 취향에 따라 호불호가 있을 수 있는데, 이 강의는 하나하나 다 설명해드리는 방식입니다. 마음 같아서는 따배씨++도 재녹화를 하면 좋겠지만, 내용을 굳이 개선해야 할 필요가 없는 상황에서 음질/화질 때문에 재녹화하기에는 너무 일이 크기도 하고 기존 수강생들은 같은 시간에 새로운 강의 제작을 강하게 요구하셔서 당분간은 따배씨++를 재녹화하기는 어려울 것 같습니다. 따배씨++는 그 자체로도 강점이 있는 강의라서 제가 C++ 강의를 다시 만든다면 (수강생들이 선택의 폭을 넓힐 수 있도록) 따배씨++를 그대로 리메이크 하기 보다는 새로운 스타일로 별도의 강의를 제작하게 될 것 같습니다. 강의 선택에 어려움이 느껴지신다면 앞 부분 샘플부터 확인해보시면 좋은 선택을 하는 데에 도움이 될 것 같습니다.
- 1
- 2
- 186
질문&답변
2023.12.01
visual studio for mac c++ 선택
Visual Studio Code와 Visual Studio는 다릅니다. 맥용 VS는 C++를 지원하지 않습니다. 윈도우에서는 VS가 가장 편합니다. 이상하게 한국에서는 맥에서 XCode 사용을 꺼리시는 것 같은데 혹시 아이폰용 앱 개발에 관심이 있으시다면 XCode 사용도 고려해보세요. 저는 맥에서는 VSCode보다 XCode를 선호합니다. (웹하시는 분들은 이것저것 다 할 수 있는 VSCode를 선호하시는 것 같습니다.)
- 1
- 2
- 176
질문&답변
2023.11.15
맥에서 Makfefile 사용하지 않고, vscode를 사용하여 헤더파일 포함해 실행시키는 법
안녕하세요? 불친절에 대한 분노가 느껴지는 글입니다만 결과적으로 스스로 해결을 하셨네요. 저도 한 성격 하기 때문에 이 자리를 빌어서 학생때 이런적이 많았다는 고백을 하고 싶습니다. 되돌아보면 분노가 결과적으로 공부에 긍정적인 에너지로 활용되는 경우도 많았습니다. 일주일 차에 이정도를 스스로 추론해내신 것은 아주 잘하신 것 같습니다만, 매번 여러 개의 파일 이름들을 타이핑 하는 것은 번거로우실 것 같아서 VSCode 팁 알려드리려고 합니다. VSCode 자체에서 빌드에 사용하는 설정들을 바꿀 수 있도록 *.json 파일들을 만들어 주는데, c_cpp_properties.json 파일에서 "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**" ], tasks.json 파일에서 { "tasks": [ { "type": "cppbuild", "label": "C/C++: g++ build active file", "command": "/usr/bin/g++", "args": [ "-fdiagnostics-color=always", "-g", "${fileDirname}/*.cpp", 는 의미입니다. 이 설정파일들을 사용하는 방법은 아쉽게도 외부링크에 있습니다. https://www.youtube.com/watch?v=UqCZda8DLGc 여기 앞부분 설치 방법 참고해보세요. 박성국님 요약도 참고하세요. 박성국님의 요약 https://blog.naver.com/sungkukshawnpark/223167856926 (윈도우) https://blog.naver.com/sungkukshawnpark/223168149338 (맥OS) 다른 수강생들로부터 도움을 받고 싶으시면 디스코드로 오세요. 디스코드에 질문 올리셔도 됩니다. https://discord.gg/QkVU8QWUzS 제가 맥을 써보기 전에 만든 강의라서 강의 안내 페이지에서 VS 이외의 환경에서는 어느정도 스스로 해결하셔야 한다고 미리 안내를 드리고 있습니다. 나중에 앱 회사 다니느라 강제로 맥을 쓰게 됐는데 C++ 문법은 동일하기 때문에 맥 사용자도 이 강의로 공부하시는 것은 좋다고 판단합니다. 강의를 통째로 재녹화하는 것은 매우 어려운 일이고 새 강의 요구가 빗발치는 상황이라서 부득이 보충하는 내용들을 간간히 외부 링크로 제공해드리거나 또는 잘 정리된 링크로 안내해드리고 있습니다. 양해를 부탁드립니다.
- 2
- 2
- 713
질문&답변
2023.10.23
메모리 할당에 관하여
수박님께서 7.10 강의 안내를 잘 해주셨는데, 스택 메모리는 프로그램이 실행될 때 미리 잡아놓고 프로그램이 끝날때까지 계속 사용합니다. (힙 메모리는 동적으로 사용) 스택을 사용하는 지역 변수는 그때그때 메모리 자체를 운영체제에게 동적으로 받아오는 것은 아닙니다. 이미 가지고 있는 스택 메모리에서 특정 공간을 그 변수 이름으로 사용할 수 있게 해주는 것입니다. 모든 변수에 대한 메모리를 그때그때 동적할당으로 받아오면 너무 느리기 때문에 시작할때 어느정도 메모리를 미리 잡아놓고 시작합니다. 반대로 아마 들어보셨을텐데 스택오버플로우 같은 경우는 미리 잡아 놓은 메모리보다 더 많은 메모리를 사용하는 경우(예: 무한 재귀 호출)에 발생하는 문제입니다. 함수의 영역을 벗어나면 지역 변수의 이름을 사용할 수 없게 되는 것이지 그 변수가 사용하던 스택 메모리 자체가 해제(deallocate, 운영체제에게 돌려주는 것)되는 것은 아닙니다. 함수 영역으로 들어왔을때 지역 변수가 특정 메모리를 사용할 수 있게 "할당" 해주는 것은 의미상으로는 맞습니다만 그때그때 동적 할당을 받는 것은 아니고 이미 프로그램이 가지고 있는 메모리에서 받아오는 것이기 때문에 빠릅니다. (동적 할당은 운영체제가 어느 메모리를 줄 지 찾아서 줘야 하기 때문에 느리지요.) 이 강의는 C++ 문법 자체도 다룰 내용이 많다 보니 메모리 관련된 내용들은 C언어 강의에서 더 자세하게 다루었습니다. 아래 웹 가시화 도구에서 간단한 프로그램을 실행해보시면 스택 메모리가 어떻게 사용되는지 확인하기 편합니다. https://pythontutor.com/cpp.html#mode=edit
- 1
- 2
- 136