Green World

반응형

agma

플랫폼 별로 구조나 기능이 다르기 때문에 구현이 다르다. 메모리 관리 방식이나 실행 파일의 특수한 구조로 인한 코드 배치 방법이 플랫폼 별로 다르기 때문에 이런 기능에 대한 지시 사항을 컴파일러에게 전달하는 방법이다.

 

#pragma 토큰 문자열

 

#pragma 지시자는 플랫폼에 종속저거인 기능에 대한 지시자이므로 컴파일러에 대해서 종속적일 수 밖에 없다. 토큰을 인식할 수 없을 경우 단순히 무시하며 컴파일을 계속 수행한다

 

Visual Studio 2008의 pragma 토큰

alloc_text, auto_inline, bass_seg, check_stack, code_seg, comment, component, conform, const_set, data_seg, deprecated, fenv_access, float_control, fp_contract, function, hdrstop, include_alias, init_seg, inline_depth, inline_recursion, intrinsic, make_public, managed, message, omp, once, optimize, pack, pointer_to_members, pop_macro, push_macro, region, endregion, runtime_checks, section, setlocale, strict_gs_check, unmanaged, vtordisp, warning

참조 : http://msdn.microsoft.com/ko-kr/library/d9x1s805(v=vs.90).aspx

 

#pragma once

헤더파일이 여러 곳에 복잡하게 #include 되어 쓰이면 중복 빌드되기 때문에 컴파일러에게 해당 헤더 파일을 한 번만 포함하도록 하는 명령어이다. 조건부 컴파일 지시자로 한 번만 포함하는 효과와 같다.

 

#ifdef _HEADERFILE_H_

#define _HEADERFILE_H_

///헤더내용

#endif

 

#pragma pack

이후부터 선언되는 구조체의 정렬 방식을 지정한다. pack 지시자는 소스의 중간에서 원하는 구조체에 대해 정렬 방식을 변경할 수 있다.

 

#pragma pack(2)

struct st1 { short s; int i; };

#pragma pack(4)

struct st2 { short s; int i; };

 

st1구조체는 2바이트 정렬되므로 6바이트를 차지하고 st2는 4바이트 정렬이 되므로 8바이트를 차지한다. 임시적으로 원하는 정렬값을 적용한 후 원래의 정렬값으로 돌아오기 위해서는 원래 값을 보관해 두어야 하는데 push, pop명령을 이용할 수 있다.

 

#pragma pack(2)

struct st1 { short s; int i; }; //2바이트 정렬

#pragma pack(push, 4)      //푸시하면서 4바이트 정렬로 바꿈

struct st2 { short s; int i; }; //4바이트 정렬

#pragma pack(pop)           //원래 정렬값 복원

struct st3 { short s; int i; }; //2바이트 정렬

 

#pragma warning

컴파일러에서 알려주는 경고를 사용자가 출력 방법을 바꿀 수 있다.

 

#pragma warning(경고제어문:경고번호)

 

경고 제어문 다음에 : 과 함께 대상 경고의 번호를 적을 수 있으며 경고 번호는 공백으로 구분하여 여러 개를 나열할 수 있ㅇ으며 경고 제어문도 콜론으로 구분하여 여러 개를 나열할 수 있다.

 

onece:번호   반복되는 경고를 한번만 출력한다.

default:번호  원래 설정대로 되돌린다.

disable:번호 경고를 출력하지 않는다.

error:번호     경고를 에러로 처리한다.

레벨:번호      경고의 레벨(1~4)을 변경한다

push[,n]      모든 경고의 레벨을 저장한다. n이 있을 경우 저장과 동시에 전역 경고 레벨을 n으로 변경한다.

pop              스택에 마지막으로 저장된 경고 레벨을 복원한다.

 

#pragma comment()

대표적으로 라이브러리를 소스코드 내에서 인클루드 할 때 사용한다.

 

#pragma comment( comment_type, [, "commentstring"]

 

compiler, exestr, lib, linker, user등의 명령이 있다.

반응형