본문 바로가기

[ C/ C++ 프로그래밍 ]/[ MFC ]

[ MFC ] C++의 주제들 - 2

ㅇ 참고 및 출처  :


 ㅇ #와 ##

 #  : 스트링(string)화 연산자
 ## : 토큰 연결 (token concatenation) 연산자

 #는 파운드 기호라고 읽고, ## 는 더블 파운드 기호라고 읽는다.

 소스코드에 대한 처리(proccessing)란, 컴파일러가 기계어 코드를 생성하는 과정(컴파일)을 의미한다.
 그래서 컴파일 전에 사용되는 명령문을 전처리 명령문(preprocessing command) 혹은 컴파일러 지시자(compiler directive)라고 한다.
 컴파일하기 전에 어떤 일을 지시하는 것이다.
위의 두가지 연산자는 전처리명령문에 사용되기 때문에, 전처리 연산자로 구분된다.


 #은 큰따옴표(")가 없는 문자 순서(string sequence)를 문자열로 만든다.
 예) #hello_World => hell_world  , #hello world ==> "hello"  world

 매트로 함수가 받는 파라미터를 문자열로 만드는 string()매크로 함수
 #define stringit(x) #x
  
 위처럼 되었을떄, 프로그램 소스에서 아래 문장은 컴파일 전에 "Seo Jin Taek"이라고 치환된다.
  stringit(Seo Jin Taek)

 ##는 두개의 토큰(token)을 컴파일 전에 연결하는 연산자다.
 #define tokencat(x,y) x##y
  tokencat(i,t);  ==>"it"


  소스 다운 :





 이 연산자들은 후에 MFC의 자동 생성 코드를 위한 매크로(macro)들에 광범위하게 사용된다.


ㅇ핸들
 핸들(handle)이란 운영체제(operation system)가 특정한 정보를 유지하기 위해서 메모리에 유지하는 정보 블록 (information block)에 붙은
고유번호(unique number)를 말한다.



 Ctrl + Alt +Del을 누르면 프로세스 컨트롤 블록에서 정보를 읽어 작업관리자가 보일인다.

프로세스 컨트롤 블록(PCBs, Process Control Blocks)은 실행중인 각각의 프로세스의 정보를 관리한다.

프로세스가 여러개라면, 이러한 블록은 메모리에 여러 개 유지되고 있을 것이다. 각각의 블록은 고유한 번호가 할당되는데
이번호를 프로세스 핸들이라고 한다.  사용자가 프로세스에 관한 정보를 알려면, 운영체제의 함수를 호출할 떄, 첫번째 파라미터로
프로세스 핸들을 넘겨야 한다.

핸들 번호만 알면  (자동조차 핸들로 자동차를 조작하듯이) 이 핸들이 가리키는 정보를 마음대로 조작(handle)할 수 있는 것이다.

또한 파라미미터로 반드시 요구 되는 핸들에 대한 이해는 핸들을 감싼(wrap) 래퍼클래스(wrapper  class)구현의 단서가 된다.

후에 DC를 감싼 CDC, CClientDC 등을 살펴볼것이다.