C# C에서 쓰던 typedef 및 #define 사용하기
프로그래밍 2011. 3. 14. 11:53 |C/C++에서는 이것 많이 사용하였습니다.
편하니까
그런데, C#에서는 이런거 절대로 용납이 안되더군요 ㅎㄷㄷ
그리하여 동일한 방법으로 써 보도록 하지요...
1. typedef 형태의 structure
e.g.
C/C++
typedef struct _header_
{
unsigned char id;
unsigned char number;
unsigned short packet_length;
unsigned short data_length;
} HEADER;
이런식으로 표현하는데 C#에서는 어떻게 쓸까?
기본이 되는 namespace에서 멤버로 지정합니다.
private struct HEADER
{
public Byte id;
public Byte number;
public UInt16 packetLength;
public UInt16 dataLength;
};
이렇게 멤버 구조체가 선언이 되면 불러다가 쓰면 되지요.
임의의 함수내부에서 쓰일 수도 있고, 전역변수 형태로 쓰일 수도 있습니다.
new로서 본 구조체를 선언해 주어야지 쓸 수 있는데...
방법은
private HEADER hdr = new HEADER();
형태로 전역변수로 선언한 다음 필요한 곳에서 그 멤버 변수를 사용하면 되지요
hdr.id = 0xFF;
hdr.number = 0x00;
hdr.packetLength = 100;
hdr.dataLength = 100;
byte 는 암시적으로 type cating이 가능하므로, hdr.id = 255;라고 표현해도 hdr.id = 0xFF가 설정됩니다. 참고하세요...
2. #define 의 전처리기 구문
C#에서는 전처리기가 무시됩니다. 또한 에러가 나지요
그런데 이것을 쓰고 싶은데 어떻게 하면 될까요?
그래서... 찾아보았습니다.
e.g C/C++
#define START 0x00
#define END 0x10
#define LENGTH 4000
등의 형태로 숫자 혹은 Hex Value를 그대로 사용하는데요
그럼 이것을 똑같은 데이터형식으로 전역변수에 저장해 두고
C#
private Byte START = 0x00;
private Byte END = 0x10;
private UInt16 LENGTH = 500;
쓰일때는 이 변수의 값으로 변경하면 되지요.
요렇게...
hdr.id = START;
hdr.packetLeng = LENGTH;
'프로그래밍' 카테고리의 다른 글
C++ 구조체 포인터의 값을 C# 구조체 배열로 가져오기 (0) | 2011.03.14 |
---|---|
vc++ 호출 규약 (0) | 2011.03.14 |
/MD, /MT의 컴파일 옵션의 차이점 (0) | 2011.02.15 |
logcat 한글 출력 하는법 (0) | 2011.01.26 |
비주얼스튜디오 단축키 (0) | 2010.11.11 |