있을 지 없을 지 모르는 상수를 #if에 쓰기

오늘 커밋 로그를 보다가 멋진 트릭을 하나 발견!

C의 #if에서 정의 됐을지 안 됐을지 모르는 상수를 계산식에 써버리면 치명적인 에러가 보통 발생합니다. 예를 들면

#if NUM_OF_GIRLFRIENDS > 1
#error you're denied to run this program.
#endif

이 코드를 컴파일할 때 미리 NUM_OF_GIRLFRIENDS 가 아예 정의되어 있지 않다면, (아마도 전혀 기억이 없는 사람.. ~먼산~)

#if > 1
#error you're denied to run this program.
#endif

이렇게 돼서 > 연산자의 왼쪽이 없어서 에러가 나는데, 보통 사람의 해결방법은 #ifdef를 위에 쓰는 것이겠지만.. 오늘 파이썬 커밋 로그에서 모 플랫폼 (사실은 FreeBSD 4 -.-;)에서 _POSIX_SEMAPHORES 가 정의되지 않아서 생기는 문제점을 Martin이 고친 것을 봤는데 이렇게 고쳐놨습니다.

#if (_POSIX_SEMAPHORES+0) == -1
#define HAVE_BROKEN_POSIX_SEMAPHORES
...
#endif

_POSIX_SEMAPHORES가 정의되어 있지 않더라도 +0 == -1이 돼서.. 결국은 제대로 전처리가 되는 것!! +_+

댓글 5 개 | 트랙백 0 개 (보낼곳) | 태그 computer


트랙백
트랙백이 없습니다.
댓글
wikiX에서 정규표현식에 e modifier로 php 코드 집어 넣을 때 흔히 쓰던 방법이군요. -.-
2005-03-29 02:15
onion  ▒
죽이는군요... 저는 저런발상은 처음 생각해봤다눙.. 역시 토끼군은 천재...@.@
2005-03-29 08:47
#if NUM_OF_GIRLFRIENDS > 1

...... -.-;;
2005-03-29 09:33
onion: BLAHBLAH+0 꼴의 코드는 제가 쓴 게 아니라 조 희대 님(wikiX 메인 개발자)께서 쓰신 거라서... =3=33
2005-03-29 14:13
t3RRa  ▒
>= 1 로 해주시지.. ㅡ.-)
2005-04-03 05:49

글이 올라온 지 30일이 지나 새 댓글은 쓸 수 없습니다.

누구?

장혜식 (Hyeshik Chang)
내일을 사랑하는 소년(!)