티스토리 뷰
1. 아래의 코드를 헤더 파일에 정의하고
#if !defined(DC__TEST_TYPE_SIZE) #define DC__TEST_TYPE_SIZE(_type, _size) \ typedef int DC__TEST_TYPE_SIZE_##_type[(sizeof(_type) == (_size)) ? 1 : -1] #endif
#if !defined(DC__TEST_TYPE_IS_SIGNED) #define DC__TEST_TYPE_IS_SIGNED(_type) \ typedef int DC__TEST_TYPE_IS_SIGNED_##_type[((_type)((_type)1 << ((sizeof(_type) * 8) - 1)) < 0) ? 1 : -1] #endif
#if !defined(DC__TEST_TYPE_IS_UNSIGNED) #define DC__TEST_TYPE_IS_UNSIGNED(_type) \ typedef int DC__TEST_TYPE_IS_UNSIGNED_##_type[((_type)((_type)1 << ((sizeof(_type) * 8) - 1)) > 0) ? 1 : -1] #endif
|
2. 테스트할 데이터 타입을 다음과 같이 선언하면 컴파일하면서 조건에 맞지 않으면 컴파일 에러가 난다.
(unsigned 경우 DC__TEST_TYPE_IS_UNSIGNED() 매크로를 사용하면 된다.)
DC__TEST_TYPE_SIZE(DC_LONG, 4); DC__TEST_TYPE_IS_SIGNED(DC_LONG);
|
3. 주의할 점은 반드시 공백 없이 이어진 C identifier 조건에 부합되는 문자열이어야 한다.
위 매크로를 사용해 “char *”, “struct xxx” 등과 같은 값은 사용할 수 없다.
이런 것까지 사용하려면 typedef 로 선언한 심볼이 충돌할 가능성이 높아지지만 ##_type 를 사용하지 않도록
DC__TEST_* 들을 수정하거나 또는 “typedef char *PCHAR;”, “typedef struct xxx XXX;” 처럼 한 단어로 바꿔 테스트하면
된다.
'TIL > C++' 카테고리의 다른 글
화면 크기에 맞는 영상 크기 구하기 (0) | 2015.01.23 |
---|
- Total
- Today
- Yesterday
- libavformat
- oid
- Virtual Thread
- springjpa
- fluentd
- C/C++
- jdk7
- Spring
- development
- springframework
- Programming
- HDFS
- AVIOContext
- DB
- DATABASE
- jdk6
- Rolling-Restart
- HLS
- CentOS
- elasticsearch
- HTTP Live Streaming
- ffmpeg
- programmer
- JAXB
- popupWindow
- JPA
- JDK21
- Java
- onbeforeunload
- springboot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |