#pragma message

C/C++/VC++ / MFC 2011. 2. 25. 13:15
참 재미있는 기능입니다.
이걸로 TODO를 만들면 VC++에서 점프가 가능합니다.


위와 같이 Output 창에서 해당 라인을 더블클릭하면 실제 소스로 이동합니다.

// with line number
#define STRING2(x) #x
#define STRING(x) STRING2(x)
#define TODO(x) message(__FILE__"("STRING(__LINE__)") : ▶"x"◀")


사용할때는
// Used
#pragma TODO("테스트")


이렇게 사용하시면 됩니다.
posted by 뚱2

#pragma comment

C/C++/VC++ / MFC 2008. 2. 20. 17:21

주로 링크를 걸때 많이 사용합니다.
형식은

#pragma comment("comment-type" [,, commentstring])

이고 comment-type에는 compiler, exestr, lib. linker, user 등이 올 수 있습니다.
Visual Studio 2005 에서는 '프로젝트 속성--> 링커 --> 입력 --> 추가 종속성' 에서
설정 할 수 있지만 다른 코드와 호완을 생각한다면 #pragma comment을 사용하는게
좋다고 생각합니다.
posted by 뚱2

#pragma once

C/C++/VC++ / MFC 2008. 2. 20. 17:21
A.h라는 헤더 파일이 있습니다.
이 파일 제일 상단에 '#pragma once'라고 표기해주면
컴파일이 한번만 됩니다.

다른 방법으로는
#ifndef __SAMPLE__H__
#    define __SAMPLE__H__

// 한번만 컴파일 할 코드 내용

#endif// #ifndef __SAMPLE__H__

해도 됩니다.
그렇지만은 한번에 하는 #pragma once가 낫겠지요 ^^

ps. #ifndef __SAMPLE__H__는 '__SAMPLE__H__'가 정의되지 않았다면 실행하라는 말입니다.
posted by 뚱2

#pragma pack

C/C++/VC++ / MFC 2008. 2. 20. 17:19
32bit 운영체제 일때

struct A
{
     BYTE  a;  // 1Byte
     WORD  b;  // 2Byte
     DWORD c;  // 4Byte
};
A test;


1+2+4 = 7 총 7Byte라고 생각하는데
실제  sizeof(test) 해보면 12Byte로 나옵니다.
이유는 운영체제가 32bit일때 4Byte에 최적화 되어 있어서
structure가 4Byte가 아니면 4Byte로 맞추는 경향이 있습니다.
이런걸 padding이라고 하는데
이럴대는 padding을 1Byte로 맞추면 됩니다.
방법은
#pragma pack(push, 1)
struct A
{
     BYTE  a;    // 1Byte
     WORD  b;    // 2Byte
     DWORD c;    // 4Byte
};
#pragram pack(pop)


이렇게 하고 다시 sizeof로 확인해 보면은 제대로 7Byte로 나타납니다.

ps. #pragma pack 컴파일러 명령은 구조체 단위로 멤버 정렬 방식을 설정할 때 사용합니다.
posted by 뚱2