본문 바로가기
IT-개발,DB

[개발/VC++] pragma 지시어에 대하여

by SB리치퍼슨 2011. 12. 28.
pragma 란 무엇인가?
 
#pragma는 define 이나 include와 같이 #으로 시작하는 전처리(precompiler) 구문의 하나이다.

1. #pragma once
- 컴파일러에게 한번만 컴파일 하라고 알려준다. 예전에는 #define으로 각헤더에서 최초 
구동시 값을 정의 하게 하는 방법으로 해결했지만 근래에는 한 줄로 해결 합니다.
- #define 으로 같은 효과내기.

#if !defined (_IS_THIS_HEADER_INCLUDED)
#define _IS_THIS_HEADER_INCLUDED
#endif


2. #pragma comment()
- 기본 형식 : #prgma comment( comment-type, comment string? ) [] 안의 구문은
comment-type에 따라 필요할 경우 사용함.
- comment type : compiler, exestr, lib, linker, user 등이 온다.
- 설정방법 :
 
1) subsystem 설정방법.
#pragma comment(linker, "/subsystem:windows")
#pragme comment(linker, "/subsystem:console")

2) section 의 설정(공유메모리사용) 
#pragma comment(linker, "SECTION :.SHAREDATA, RWS") 
#pragma data_seg("SHAREDATA")와 함께 사용하여 공유 메모리를
생성한다. 위의 명령어 대신 def 파일안에 아래와 같이 해 주어도 된다.

SECTIONS
SHAREDATA READ WRITE SHARED

3) 명시적인 라이브러리 링크 (사용자 정의형 링크의 경우 추가적인 라이브러리 링크 경로를 설정해 줍니다)
#pragma comment(lib, "Mylib.lib")

4) 자세한 내용은 MSDN을 참조하세요~~ㅎ


3. #pragma data_seg()
- 기본 형식 : #pragma data_seg( ["section-name"[, "section-class"] ] ), 
[]는 사용하지 않아도 됨.
- 예) DLL에서 Data 공유할 때 사용합니다. 하나의 DLL 파일에서 여러번 메모리에 로딩이 되더라도 하나의 메모리 영역에서 데이터가 공유됩니다.

#pragma data_seg("SHAREDATA")
int x;
char y;
CSharedClass sharedClass = {0};
#pragma data_seg()

- 위와 같이 사용하려면 반드시 섹션을 설정해 주어야한다. 

4. #pragma warning

- 기본 형식

#pragma warning( warning-specifier : warning-number-list [; warning-specifier : 
warning-number-list...] )
#pragma warning( push[,n] )
#pragma warning( pop )

- 보편적인 사용법

#pragma warning(disable:4996)

5. #pragma message()

- 컴파일중에 메시지를 뿌리기 위함.
- 예) #pragma message(" ")
반응형

댓글