티스토리 뷰
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
- development
- HDFS
- CentOS
- onbeforeunload
- springboot
- oid
- elasticsearch
- springjpa
- AVIOContext
- Rolling-Restart
- JPA
- DB
- ffmpeg
- fluentd
- Virtual Thread
- Java
- Programming
- jdk7
- libavformat
- Spring
- jdk6
- popupWindow
- DATABASE
- HLS
- C/C++
- JDK21
- programmer
- JAXB
- springframework
- HTTP Live Streaming
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
