초보자를 위한 C++ 200제 독자를 위한 Q&A 공간입니다

초보자를 위한 C++ 200제 독자를 위한 Q&A 공간입니다.

초보자를 위한 C++ 200제 독자를 위한 Q&A 공간

이곳이 저와 여러분들이 소통하는 자리가 되었으면 좋겠습니다.

책의 내용과 관련하여 궁금한 점이나 묻고 싶은 내용은 아래 댓글로 질문해주세요.

질문은 공개 댓글로 해주셔야 많은 분들에게 공유할 수 있다는 것도 참고해주세요.

질문에 대한 답변은 저 뿐만 아니라 저보다 지식이 많은 분들께서 해주셔도 됩니다.

첨부 파일은 초보자를 위한 C++ 200제 책에 수록된 모든 소스코드입니다.

본문 소스 코드 30MB – 다운로드 [링크]

C++의 대가가 되는 그날까지 파이팅입니다~!

c++ 공부 책 200제 박준태

 

일부 예제 압축 파일

exam97.zip

 

17 thoughts on “초보자를 위한 C++ 200제 독자를 위한 Q&A 공간입니다”

    • txt 파일을 ansi로 바꿔주세요.

      메모장 – 다른이름으로저장 – ansi 선택하면 됩니다.

      왜 그런진 http://riniblog.egloos.com/995731 이 포스트 읽어주세요.

      핵심만 발췌하면,

      1. 한글 윈도우에서 사용하는 코드 페이지는 CP949이며 EUC-KR 인코딩을 확장한 형태
      2. 한글 윈도우에서는 CP949로 인코딩
      3. 두 인코딩은 서로 호환이 되지 않기 때문에 단순히 값을 복사하면 다 깨진다.
      그래서 MultiByteToWideChar과 WideCharToMultiByte라는 함수를 지원한다.

      응답
  1. 예제 51번 코드를 따라했는데요. localtime이 unsafe하다고 localtime_s로 하라고 하네요. 그런데 그렇게 하니까 localtime_s의 매개변수는 1개만 쓰는게 아니라고 하면서 실행이 안됩니다. 어떻게 해야하나요?

    응답
  2. call by value는 인자로 넘어온 값을 내부적으로 복사해 사용한다고 되어있습니다. 이게 무슨 원리인지 이해가 안됩니다. 왜냐하면 그 뒤에 ‘year변수에 직접 10을 더한 것이 아니라 내부적으로 복사한 값에 10을 더한 셈입니다.’ 라는 말이 있습니다. 그러면 year변수가 인자로 넘어간 이유는 그저 Func함수를 활성화시키기 위함인건가요? 함수의 작동순서도 이해가 안되네요;;

    응답
    • void Func(int arg)

      이 함수는 16번 라인을 통해 main() 함수의 year 10값을 전달 받습니다.

      “내부적으로 복사”한다는 뜻은 int arg에 10이란 값이 할당된다는 겁니다.

      그래서 변경 전 arg는 10이었지만, 8번 라인을 통해 20이 되었고 9번 라인을 통해 20이 출력됨을 확인할 수 있습니다.

      하지만 14번 라인에 선언된 year 값은 16번 라인 Func 함수 호출 이후에도 10이란 값이 유지됩니다.

      이는, 뒤에 나오는 call by reference와 차이점을 보이기 위한 예제입니다.

      응답
  3. 예제소스를 직접 작성해서 연구할 시간적 여유가 없어서
    부득이하게 소스를 다운받아서 보게 되었습니다. 궁금한 점이 있어서 질문올립니다.
    1. 195 폴더는 무엇인가요?
    2. json_exam1.json파일은 무엇인가요?
    3. 소스파일을 어떻게 해서 사용해하는지요?
    – 한 프로젝트에 2개 이상 소스파일을 넣으면 main이 2개 이상이라서 사용할 수 없지 않나요?

    응답
  4. 53 문자열 비교하기 부분에서
    책에 보면 값이 서로 같다면 0이 리턴되고 다르면 -1이 리턴된다고 설명돼있는데
    제가 알기론 c언어의 strcmp처럼 서로 문자열이 같다면 0이고 비교대상의 아스키코드값이 더 작으면 -1 더 크면 1로 리턴하는 걸로 알고 있는데 확인 부탁드립니당!

    응답
    • 네 맞습니다. 문자 하나를 비교할 땐 1 또는 -1입니다.

      string tmp1 = “B”;
      string tmp2 = “C”;

      cout << tmp1.compare(tmp2) << endl; 이 경우 -1이 리턴되고, cout << tmp2.compare(tmp1) << endl; 이 경우 1이 리턴됩니다.

      응답
  5. 활용136번
    설명중 “세마포어, 뮤텍스, violate 등 공유자원을 사용하기 위한 여러 기법”이란 말이나옵니다.
    세마포어나 뮤텍스는 알겠는데 violate은 무엇을 말하는 것입니까?
    구글링을 해도 알수가 없네요.

    응답
    • https://skyul.tistory.com/337 이 글로 대신하겠습니다.

      volatile은 미묘한 키워드라 잘 알고 쓰면 큰 도움이 될 수 있지만, 또한 여러 가지 문제를 일으키는 근원이 되기도 한다. 특히 명확한 표준이 있는 게 아니므로, 사용하는 자신이 사용하는 C/C++ 컴파일러의 매뉴얼을 꼼꼼히 읽고 volatile을 어떻게 지원하는지 파악하는 게 중요하다.

      volatile은 단일 CPU 환경에서 컴파일러 재배치 문제는 해결해주지만, MMU나 멀티CPU에 의한 재배치에 대해서는 완전한 대안을 제공하지 못한다. 또한 변수를 읽은 후에 값을 수정하고 다시 쓰는 read-modify-write를 원자적으로 수행할 수 있게 해주지도 않는다. a += 5; 같은 단순한 명령도 실제로는 a를 메모리에서 읽고 5를 더한 후에 다시 메모리 쓰는 복잡한 연산이므로 a를 volatile로 선언하는 것만으로는 이 코드를 멀티쓰레드에서 안전하게 수행할 수는 없다는 뜻이다. 유용성과 한계를 충분히 인지하고 필요에 따라 적절히 volatile을 사용하자.

      응답
  6. 초보자를 위한 c++200제 예제(5674-782.zip) 다운 받았는데, 어디에 저장해야 코딩 연습 (교재 94번 파일 한 줄씩 읽기 연습 중)때 사용할 수 있나요?

    응답
  7. 안녕하세요. 현재 책 보면서 실습을 하고 있는데 01.cpp를 만들고 소스파일 -> 추가 -> 새항목 -> c++ 파일(.cpp)를 눌러 02.cpp를 만들었는데 실행시키면 오류가 납니다.

    오류 코드는 아래와 같습니다.

    코드 : LINK2005
    설명 : main이(가) 02.obj에 이미 정의되어 있습니다.

    코드 : LINK1169
    설명 : 여러 번 정의된 기호가 있습니다.

    응답

Leave a Comment