2019/01 10

[C++]warning C4482 : 비표준 확장 에 대해서

프로젝트를 빌드 하던 도중 warning C4482 을 발견 했다. 경고 1 warning C4482: 비표준 확장이 사용되었습니다. 정규화된 이름에 'MyCodeException::ExceptionID' 열거형을 사용했습니다. [경로]\[파일].cpp [줄] 위와 같은 에로가 발생하는 이유는 함수 호출 파라미터에 enum(열거형)을 전달 할 때 발생한다. ex) AfxMessageBox(MyCodeException::ExceptionID::num1); - 정식 설명 - 이 경고 메세지는 형식 내부(클래스, 구조체, 네임스페이스 등)에 선언된 이름있는 enum을 사용하게 되었을 때 나타나는 증상이다. 빌드시 경고 메세지를 없애기 위해서는 [형식 내부명]::[열거형 항목] 으로 사용하면 된다. ex) Af..

C,C++ 2019.01.31

메모리 영역(Heap, Stack, Data, Code)

주기억장치(RAM) 에는 크게 Heap, Stack, Data, Code 로 사용하는 영역(Segment)이 있다. ( BSS 영역도 있다는데 나중에 알아보자. ) 각 데이터 영역은 함수, 변수, 상수 등의 시작 주소값을 가진다. ex) main 함수의 주소값 : 08048400 - Heap malloc(Memory Allocation), new 등으로 동적 메모리를 선언할 때 할당되는 영역 - Stack 지역변수(local), 매개변수(파라미터, parameter), 리턴(return) 등 임시로 사용할 메모리를 선언할 때 할당되는 영역 - Data 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등 프로그램 실행과 동시에 선언할 때 할당되는 영역 - C..

C,C++ 2019.01.23

동적(Dynamic) vs 정적(Static)

동적과 정적. 매번 찾아보고 이해해도 다시 듣다보면 헷갈려서 정리해 둔다. 일단 동적과 정적을 알아보자. 동적(움직일 動, 과녁 的) : 움직이는 성격의 정적(고요할 靜, 과녁 的) : 정지한 성격의 (동동 떠다니고, 정박해 있고... ㅎㅎ) - 동적할당 vs 정적할당 1. 동적할당 ● 동적할당은 new 연산자를 사용하여 동적으로 할당한다 ● 동적할당된 변수는 대체로 힙(heap) 메모리 공간에 저장된다 2. 정적할당 ● 정적할당은 컴파일 타임에 미리 할당한다 ● 정적할당된 변수는 프로그램의 전역(global) 메모리 공간이나 스택(stack) 메모리 공간에 저장된다 일반적으로 동적 라이브러리(Dynamic Library) 와 정적 라이브러리(Static Library)에 대해서 말할때 많이 사용된다.

C,C++ 2019.01.22

싱글바이트, 멀티바이트, 유니코드

쓰고 보니 뭔가 잘못 되었다. -싱글바이트아스키코드를 통해 0x00 ~ 0x7F 범위의 문자 + 0x80 ~ 0xFF 범위의 확장 문자를 통해 유럽 언어를 표현한다. - 멀티바이트아스키코드를 통한 128개의 공간으로는 수많은 언어를 표현할 수가 없다. (알파벳 제외)이 문제점을 해결하기 위한 방안이 멀티 바이트 코드다. 멀티 바이트 코드의 표현 방식은 아래와 같다.1. 아스키 코드에 포함되는 문자는 1Byte로 표현.2. 아스키 코드에 포함되지 않는 문자는 2Byte로 표현.ex) 'abs절대값' 과 같은 문자열 -> 'abs' 3Byte + '절대값' 6Byte + NULL문자 1Byte 총 10Byte가 할당된다. 아스키 코드에 따라 할당되는 영역이 달라짐으로 효율적으로 보이긴 한다.단, 일부의 함수..

C,C++ 2019.01.22

char, wchar, tchar 에 대해서

- char character 로써 1Byte(8bit) 크기의 문자 타입이다. - wchar wide character 로써 2Byte(16bit) 크기의 문자 타입이다. - tchar char 혹은 wchar 를 상황에 맞게 자율 변환 하는 문자 타입이다. - 주석 - 1. char 의 8bit 중 7bit를 사용해서 아스키코드를 표현한다. 1bit는 오류 검출용으로 사용을 했었다. 2. 기존 1Byte 의 문자 타입의 크기로는 모든 언어를 표헌할 수 없었다. (한글, 일어 등) 따라서 2Byte 크기의 문자 타입이 필요해서 wide character 가 추가 되었다.

MFC 2019.01.22

LP, T, C, STR 등에 대하여

LPSTR, LPCSTR, LPTSTR, LPCTSTR, LPWSTR, LPCWSTR 등 너무 많다. -- 서론 -- C, C++ 은 String 자료 구조형 자체를 지원하지 않는다고 한다. (compiler 차원에서) String을 어떻게 사용할지 고민한 결과 : 64bit pointer VC++6.0 이전 -> 32bit pointer 과거 -> 16bit pointer ( 24bit 메모리관리를 LP를 통해 extended memory(연속 확장 메모리) 라는 이름으로 관리 했다고 한다. ) (뭔소리여...) -C 함수 내부에서 인자값을 변경하지 말라는 뜻 -W wide char 를 의미 (2Byte) -> unicode. -STR string 형태로 쓸거라는 뜻 내부적으로 char형 배열 + nu..

MFC 2019.01.22

[MFC] TCHAR에 관하여

- TCHAR 란? 1. MS(microsoft 이하 마소)에서 전세계의 언어에 맞춰 개발하는 것이 짜증남. 2. windows를 unicode 기반으로 개발하기 시작. 3. char 와 wide char 의 크기 차이가 발생 ( 1byte : 2byte ) ( 포인터 연산을 많이 하는 c, c++ 에서 치명적 ) 4. 컴파일러가 precompile option을 기준으로 동작하도록 새로운 변수 모양의 Macro를 선언 -> 요것이 바로 TCHAR, t_char 인 것이다! - type casting multi-byte : char unicode : w_char, wide char MFC 기반 CString - CString to TCHAR 형 변환 // 선언 CString cstr; // 형 변환 TC..

MFC 2019.01.22
반응형