본문 바로가기

프로그래밍/C++

GetLastError() - 리턴코드 (에러값) 0 0x0000 작업을 완료했습니다. 1 0x0001 올바르지 않은 함수입니다. 2 0x0002 지정한 파일을 찾을 수 없습니다. 3 0x0003 지정한 경로를 찾을 수 없습니다. 4 0x0004 파일을 열 수 없습니다. 5 0x0005 접근이 거부되었습니다. 6 0x0006 잘못된 핸들입니다. 7 0x0007 저장 컨트롤 블록이 손상되었습니다. 8 0x0008 저장 공간이 부족해서 이 명령을 수행할 수 없습니다. 9 0x0009 저장 컨트롤 블록 주소가 올바르지 않습니다. 10 0x000A 환경이 올바르지 않습니다. 11 0x000B 잘못된 형식의 프로그램을 로드하려고 했습니다. 12 0x000C 액세스 코드가 올바르지 않습니다. 13 0x000D 데이터가 올바르지 않습니다. 14 0x000E 저장 공.. 더보기
수치적분 사다리꼴 C 코드 수치적분(Trapezoidal Approximations) 의 사다리꼴 방식을 이용하여 면적을 구하는 방법은 다음과 같다. A~B 사이의 구간을 사다리꼴 모양으로 쪼개어 더하면 되는데, 사다리꼴 면적을 구하는 공식은 초등학교 산수책에도 나와 있다. {(밑변 + 윗변) * h} / 2, ( h: 높이 ) 이것을 이용하여 A~B 구간의 면적을 구할려면 이와 같이 표시할 수 있다. 그럼 하나의 예제를 들어보자. 다음과 같이 반지름의 길이가 2인 원의 1/4 면적을 구하는 공식은 다음과 같다. S = (π / 4) * r * r = (π / 4) * 4 = π 면적이 원주율로 나오게 되는데 원주율 구하는 방정식을 코드로 표시하면 #include #include #include using namespace std.. 더보기
char 배열 초기화 방법 char 배열뿐만 아니라 일반 배열도 마찬가지일 것 같다. 보통 char name[128]; 로 선언하고 초기화 할때 다음과 같은 방법을 사용한다. 1. name[0] = {0,}; 2. memset(name, 0, sizeof(char) * 128); 아마 코딩의 간편함의 이유로 1번을 많이 사용할 것 같은데, 사실 내부적으로 원리는 같다. 어셈블리 코드를 보면 내부적으로 memset을 호출하고 있다. VS2015 를 사용했으며, 컴파일러마다 차이는 있을 것 같다. 그렇다면, 1번방법에서 컴마(,) 를 안찍으면 어떻게 될까? name[0] = {0}; 똑같이 배열이 0으로 초기화가 된다. 어셈코드도 동일하다. 이것또한 컴파일러마다 차이가 있겠지만 아직까지는 관용상 1번 방법을 많이 사용하는듯 하다. 더보기
printf 류 함수에서 int64 형 데이터 사용방법 printf 류 함수를 사용할때, int64형과 같이 큰 데이터를 그냥 '%d' 로 집어 넣으면 제대로 출력되지 않는다. 0으로 출력되거나 엉뚱한 값이 나올 것이다. 해결방법을 알기전에 먼저 타입에 대한 잠깐 언급을 해보면, int64 타입은 32비트 또는 64비트 플랫폼에서 모두 64비트 크기를 가지고 있다. 반면 size_t, ptrdiff_t타입은 32비트 플랫폼에서는 32비트사이즈, 64비트 플랫폼에서는 64비트 사이즈를 가지고 있다. 해결방법은 크게 2가지가 있다. 먼저 printf 는 cout로 대체, sprintf 는 boost::format 이나 std::stringstream 을 사용하면 된다. 그 다음 방법은 더 간단하다. '%lld' 를 사용하면 된다. printf("%lld", i).. 더보기
C++11 스마트포인터 auto_ptr은 더이상 쓰지 않는다 http://egloos.zum.com/sweeper/v/2826435 스마트 포인터를 사용하기 위해서는 #include using namespace std; 가 필요하다. make_unique - 이동만 가능하며, 복사는 허용하지 않음 http://en.cppreference.com/w/cpp/memory/unique_ptr auto sp = std::make_unique(12); //auto sp2 = sp; // error auto sp3 = std::move(sp); // sp는 이제 empty, 소유권은 sp2에게 넘어감 make_shared - 포인터 복사가 가능, 내부적으로(Control Block) 참조카운트를 가지고 있음 http://en.cppref.. 더보기
C++11 재정의규칙과 override class A{public:virtual void doWork() { printf(" I am A");}}; class B : public A{public:virtual void doWork(); { printf(" I am B");}}; using namespace std; unique_ptr object = make_unique(); object->doWork(); 하면 어떻게 될까? B클래스에서 doWork()를 재정의 하였기 때문에 당연히 "I am B" 가 출력이 된다. 이와 같이 멤버함수의 재정의를 하기 위해선 몇 가지 조건을 만족해야 한다. * 기본 클래스 함수가 반드시 가상 함수이어야 한다. * 기본 함수와 파생 함수의 이름이 반드시 동일해야 한다 (소멸자는 예외) * 기본 함수와 파생 함.. 더보기
C++11 이동생성자 (Move Constructor) Rvalue Reference가 추가되면서 같이 추가된 이동생성자에 대한 설명이다. 이동생성자를 사용하는 궁극적인 목적은 바로 성능향상인데, 아래의 예제를 통해 설명함. #include #include #include using namespace std; struct Person{string name;int year; Person(string p_name, int p_year): name(move(p_name)), year(p_year){cout 더보기
C++ 포인터와 참조의 차이 포인터와 참조자의 공통점은 다른 객체(변수)를 간접적으로 참조하는 역할을 하지만 몇가지 차이가 존재하는데, 다음과 같다. * 참조자는 선언과 동시에 초기화를 해야 한다. * 초기화 시, 참조자는 값(value)을 직접 입력받고, 포인터는 값(value)의 주소값을 입력받는다. * 클래스 멤버 접근 시, 참조자는 "."을 사용하고 포인터는 "->"를 사용한다. * 포인터는 nullptr 값을 가질 수 있지만 참조자는 nullptr 값을 가질 수 없다. 다시 말하면 참조자는 nullptr과 같은 유효검사를 할 수 없다. 이것이 바로 참조대신에 포인터를 사용하는 가장 큰 이유일 것이다. * 참조자는 한번 가리킨 대상을 변경할 수 없지만, 포인터는 자신이 가리키는 대상을 언제든지 변경할 수 있다. string .. 더보기
C++11 RValue Reference - 우측값 참조 => 1+2; 이와 같이 3이라는 숫자가 생성되자 마자 사라지는 값을 c++에서는 우측값이라고 한다. => int sum = 1+2; 반면 sum과 같이 기억되는 변수를 왼쪽값이라고 한다. c++를 처음 배울때 값에 의한 전달, 참조에 의한 전달이라는 것을 배우는데, 여기서 참조전달은 정확히 이야기하면 왼쪽값 레퍼런스 전달을 의미한다. 예를 들어, void SetName(string& name) { m_name = name; } SetName의 파라미터는 name이라는 왼쪽값 참조를 전달하고 있다. C++11 에서는 오른쪽값 레퍼런스도 가능하게 하였는데, 표시는 기존의 &와 비슷한 &&를 사용한다. int nCount; // nCount는 왼쪽값 int& lrefValue1 = nCount; // 왼쪽값.. 더보기
C++ Korea와 함께하는 멜팅팟 세미나 동영상 May Microsoft be with C++ Developers https://channel9.msdn.com/Events/Channel9-Korea/cplusplus/May-Microsoft-be-with-C-Developers Ranges for The C++ Standard Library https://channel9.msdn.com/Events/Channel9-Korea/cplusplus/Ranges-for-The-C-Standard-Library C++ String 파고 들기 https://channel9.msdn.com/Events/Channel9-Korea/cplusplus/C-String-- C++ Korea 및 멜팅팟 세미나 소개 https://channel9.msdn.com/Event.. 더보기