2009-09-03 3 views
0

내 응용 프로그램에서 더 나은 디버깅을 사용하려면 일부 NSAssert 항목 및 다른 것들을 사용하고 싶습니다. NSAssert는 어설 션이 실패 할 경우 인쇄 할 문자열을 원합니다. 그 문자열에 정보를 모두 입력하지 않으면 좋지만 쓸데 없는데, 그 곳 곳곳에서 할 때 큰 혼란이 될 수 있습니다.매개 변수를 취할 수있는 매크로를 작성하는 방법은 무엇입니까?

그래서 클래스 이름, 메서드 이름 및 다른 것들과 같은 유용한 정보로 가득 찬 문자열로 NSAssert 호출을 수행하는 매크로를 만들고 싶습니다. 하지만 더 중요한 것은 사용자 정의 주석도 제공하고 싶습니다. 이 같은 매크로 상상 :

USEFUL_ASSERT (! foo는 = 전무를, @ "좋은 아니라고, 정말") 내가 여기에 함수 또는 메서드 호출을 사용할 수없는 많은 이유에 대한

때문에 컨텍스트가 손실 될 것이고 어떤 클래스가 그 문제를 일으켰는지 알아 내지 못했습니다.이 방법으로 인해 문제가 발생했습니다. 그 방법 자체 내에서만 수행 할 수 있기 때문에 [self class]와 _cmd와 같은 많은 정보를 전달해야하지만이 모든 것들이 모든 곳에 흩어지기를 원하지 않습니다. 삽입 할 코드가 짧을수록 유지 보수가 잘됩니다.

아이디어가 있으십니까?

+1

RTFM을 사용하셨습니까? (보통 내 스타일은 아니지만, * 사용자 이름, afterall) –

+0

남자. TFM이 너무 커서 항상 읽었습니다. 그러나 나는 모든 것을 끝내기까지 또 다른 6 년이 필요할 것입니다. 그래서 저는 학습 과정을 가속화하려고 노력하고 있습니다. –

답변

1
#define USEFUL_ASSERT(condition, comment) /*whatever*/ 
+0

니스, 그냥 조건을 사용할 수있는 것처럼 보입니다. 매크로 정의에 주석을 달았습니까? 시도해 봐! 완전한. –

+1

변수 바인딩이 아니라 텍스트 대체라는 점을 기억하십시오. 예를 들어,'USEFUL_ASSERT (++ x == 0, @ "It 's zero")'라고 쓰면,'x'는 매크로 본문에 '조건'이 있습니다. – Chuck

+1

예를 들어 매크로 본문이'NSLog (@ "% u는 true? % @", (condition)? @ "YES": @ "NO")'이면'NSLog (@ "% u는 사실입니까? % @", (조건), (조건)? @ "예": @ "아니오")'. 여기에는 두 개의 '++ x' 표현식이 있으므로'x'는 두 번 증가합니다. –

2

macro docs을 살펴보십시오.

+0

거기에 또 다른 FM이 있다는 것을 알아두면 좋습니다. 감사. –