2017-04-07 7 views
1

howmany() 메서드를 정의하는 코드를 작성하려고합니다.시스템 기능과 같은 매크로 정의를 해제하는 방법은 무엇입니까?

a previous question에 따라 /usr/include/sys/types.h

#define howmany(x, y) __DARWIN_howmany(x, y) 

에 같은 이름을 가진 함수와 같은 매크로가 OSX에서

, 나는

#ifdef howmany 
#undef howmany /*undefining '/usr/include/sys/types.h' */ 
#endif 

그러나 함수로 헤더 파일에 #undef 포함 해봤 유사 매크로는 활성 상태로 유지됩니다.

/usr/include/sys/types.h:184:9 참고 : 매크로 'howmany'#DEFINE howmany (x, y)는 여기에서 정의 __DARWIN_howmany (X, Y)/* # y를 X에서의 == 비트? */

이 함수와 같은 매크로는 어떻게 비활성화해야합니까?

+1

지금 막 시도해 보았습니다. #include 다음에 나오는 간단한 #undef howmany가 정상적으로 작동합니다. – Ssswift

+2

이것은 매우 허약합니다. 예, 아마 작동시킬 수는 있지만, 물건을 가져 오는 방법에 대한 아주 작은 변경으로 인해 다시 실패하게됩니다 (아니면 더 나쁜 코드를 호출하는 것). '# undef'가'types.h'를 포함 할 수있는 모든 파일에 포함되어 있는지, 정의 된 후에는 정의되지 않았는지 확인해야합니다. 이것은 깨뜨릴 수있는 많은 방법입니다. 함수 이름을 바꿉니다. 이름이 찍혔다. –

+1

@Rob 네이피어는 답을 만들어주십시오. 그것은 좋은 것이고 투표를하고 싶습니다. 나는 또한이 질문을 대답하기를 원한다. 그래서 나는 그것이 "대답 : 0"목록에서 벗어나기를 원한다. 그리고 Q/A 쌍은 Q/의견 쌍보다 훨씬 좋네요. 그리고 당신은 아주 옳습니다. – Yunnosch

답변

0

이것은 매우 깨지기 쉽습니다. 예, 아마 작동시킬 수는 있지만, 물건을 가져 오는 방법에 대한 아주 작은 변경으로 인해 다시 실패하게됩니다 (아니면 더 나쁜 코드를 호출하는 것). types.h을 포함 할 수 있고 정의 된 후 정의되지 않은 모든 파일에 #undef이 포함되어 있는지 확인해야합니다. 이것은 깨뜨릴 수있는 많은 방법입니다. 함수 이름을 바꿉니다. 이름이 찍혔다.

+0

답변을 수락하지만 결국 코드의 모든 기능에 이름을 변경하기로 결정했습니다. – ilciavo