목록c++ (19)
살아가는 이야기
C++에서 void 값을 사용할 일은 없다. void 포인터를 디레퍼런스(dereferencing)해도 C++ 규정에 어긋난다. 그럼에도 불구하고 void 값을 써야 하는 경우가 간혹 있다. 예를 들어서 다음 코드를 보자. p? delete p: ; 여기에서 :와 ; 사이에 어떤 값을 넣어 줘야 하는데, 이 값의 타입은 delete p의 타입과 같아야 한다. delete p의 타입은 당황스럽게도 void다. 따라서 :와 ; 사이에는 void 값을 넣어 주어야 한다. 굳이 void 값을 넣으려면 바로 이 문제에 답이 있다. delete new int(0) 이 수식의 값이 바로 void 값이 된다. 이렇게 작성한 샘플 프로그램을 적으면 다음과 같다. #define VOID (delete new int(0))..
1. 다음 사이트에서 doxygen for windows를 다운로드한다. http://www.stack.nl/~dimitri/doxygen/download.html#latestsrc 2. 같은 사이트에서 매뉴얼도 다운로드한다. pdf와 chm 중 아무 거나 상관 없다. 3. 단계 1에서 다운로드 받은 파일을 실행하여 기본 위치에 설치한다. 4. 자신이 작성한 C++ 소스코드에 매뉴얼을 참고하여 doxygen 주석을 추가한다. 이 때, 단계 2에서 다운로드한 매뉴얼의 3장을 참고한다. 5. 설치된 프로그램 그룹에서 Doxywizard를 실행한다. 6. (Doxywizard Step 1) 작업 디렉토리를 설정한다. 단계 4에서 작성한 파일들이 있는 폴더를 선택해도 된다. 7. (Doxywizard Step ..
C++ 컴파일러 오류 중에서 위 제목과 같은 오류가 발생하는 경우가 있다. 이것은 스트림 생성 오류다. 입출력 스트림 객체는 복사하면 곤란한 상황이 발생한다. 따라서 스트림 객체를 넘겨줄 때는 항상 참조(reference, &)로 넘겨주어야 한다. 그런데 스트림 객체를 그냥 복사하라고 한다면(예컨대 참조형이 아닌 인수로 넘기거나 변수에 대입 연산을 하는 경우를 들 수 있음), 위와 같은 오류가 발생한다. 이런 오류가 발생했다면 스트림을 복사하지 않았는지 잘 살펴보자.
Visual Studio 2005에서 이 글 제목과 같은 "Run-Time Check Failure #2 - Stack around the variable 'n' was corrupted."라는 메시지가 나타났다. 다른 컴파일러를 이용하면 잘 작동하던 프로그램이었기 때문에 더욱 더 당황하게 되었다. 원인은 무엇일까? 웹 페이지를 찾아 보니 이것 때문에 고생한 사람들이 많았던 것 같다. 페이지 열 개가 넘는 검색 결과! 그런데 원인은 무엇일까? 원인은 포인터 문제다. 지역 변수(배열 변수든 클래스 변수든 상관 없음)의 주소(포인터)를 이용하여 그 변수에 무엇인가를 기록하려고 할 때, 타입 오류로 인해서 실제 변수에 할당된 크기보다 더 많은 부분에 기록하는 경우에 이런 오류 메시지가 나타난다. 결과적으로 지..
Visual Studio 2005를 이용하여 파일 입출력을 수행하다가 보니 다음과 같은 경고 메시지가 나왔다. warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 내용을 읽어 보면 fscanf는 안전하지 않으니 fscanf_s를 사용하라는 말이다. 그리고 친절하게도 이 경고를 없애려면 _CRT_SECURE_NO_WARNINGS를 사용하라고 한다. 어떻게 사용하라는 말인가? 컴파일할 때 _CRT_SECURE_NO_WARNINGS를 정의하도..
Dev C++라고 무료 C++ 개발 환경이 있다. 최근 Dev C++ 5를 설치했는데 이것과 관련한 설정 팁을 몇 개 적겠다. 1. 줄 번호 배경색 변경: 처음에 설치하면 줄 번호 있는 부분의 배경이 까맣게 나와 보기 좋지 않다. 이것은 '도구(T)' 메뉴의 '편집기 설정(E)' 메뉴를 선택한 다음 '구문/문법' 탭의 'Gutter'를 선택한 후, 전경색과 배경색을 다시 설정하면 된다(아래 그림 참고) 2. 프로그램 실행 후 잠깐 멈추는 기능 추가: Dev C++는 콘솔 프로그램을 실행한 다음에 잠깐 멈추는 기능이 없다. 이를 위해서는 다음과 같은 내용으로 runNpause.bat 파일을 Dev 설치 폴더의 bin 폴더(예: C:\Dev-Cpp\bin)에 만든다. @echo off %1 pause 그리고..
GNU C++로 프로그래밍하다 보면 제목에 있는 것처럼 다음과 같은 오류 메시지가 발생하는 경우가 있다. Undefined reference to 'vtable for 클래스 이름' 이것은 가상함수(virtual function)를 선언하고 실제로 정의하지 않은 경우에 발생한다. 만약 추상 클래스(abstract class)를 만들기 위해 가상함수를 사용하였다면 순수가상함수(pure virtual function)로 선언해 주어야 한다. 즉 클래스 정의 내에서 해당 멤버함수 선언의 맨 끝에 =0를 추가해 주면 된다. 예를 들어 클래스 Fruit에 순수가상함수 print를 선언하고 싶다면 다음과 같이 하면 된다. class Fruit { public: void print(ostream&) = 0; };
MS 비주얼 C/C++ 6.0은아직도 많이 사용되는 프로그래밍 도구다. 엄밀히 말하면 Microsoft Visual C/C++ 6.0라고 불러야 되겠지만 우리나라 사람들은 그냥 "비주얼 C"라고 부른다. 어떤 착한 교수님이 비주얼 C/C++ 6.0 문제해결 방법에 대해 정리해 둔 것이 있어서 여기에 링크를 저장해 둔다. http://www.cs.virginia.edu/~cs216/Fall2005/labs/MS%20Visual%20C++%20FAQ.htm 아쉽게도 영어로 작성되어 있다. 그렇지만 아쉬우면 능히 읽어 낼 수 있으리라고 생각한다.