2013-05-30 3 views
1

아무도 다음과 같은 이유를 말해 줄 수 있습니까? "사용하지 않은 변수 str"을 경고합니다. SetAccessibilityLabelForView는 MACRO입니다.iOS : MACRO 내의 변수를 사용하는 문제

NSString *str = [NSString stringWithFormat:dynString, index]; 
SetAccessibilityLabelForView(myView, str); 

dynamicString은 "dynamic%d"과 같은 싱글 톤 클래스로 설정됩니다.

매크로 RUN_TESTS true 또는 false하지만 다른 부분을 제거한 경우 다음 경고가 사라질 때

#if RUN_TESTS 
#define SetAccessibilityLabelForView(view, label) view.accessibilityLabel = label 
#else 
#define SetAccessibilityLabelForView(view, label) 
#endif 

경고는 경우 모두에 온다!

내가 경고를 제거하려면 다음을 사용하여 시도했다

나에게 ERROR 제공
SetAccessibilityLabelForView(myView, [NSString stringWithFormat:dynString, index]) 

"기능과 같은 매크로 호출을 제공 너무 많은 인수를"!

은 그 때 나는 RUN_TESTS에 해당하는 경우 RUN_TESTS FALSE하지만 오류 "예상을 ']"줄 때

#if RUN_TESTS 
#define SetAccessibilityLabelForView(view, label, ...) view.accessibilityLabel = label 
#else 
#define SetAccessibilityLabelForView(view, label, ...) 
#endif 

지금 같은 라인 작동, 다음에 내 매크로를 변경! 휴!

누군가 나를 도와 줄 수 있습니까? 두 경우 모두 작동하는 매크로를 얻고 싶지만 RUN_TESTS가 FALSE 인 경우 매크로에 의해 생성 된 줄을 무시하고 싶습니다.

+0

포스트 매크로 코드하십시오

#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused-variable" NSString *str = [NSString stringWithFormat:dynString, index]; SetAccessibilityLabelForView(myView, str); #pragma clang diagnostic pop 

[편집]

마지막으로 나는 .. 형식의 문자열을 지원하는 다른 매크로를을 writting 더 나은 솔루션을

#if RUN_TESTS #define SetAccessibilityFormatedLabelForView(view, labelFormat, ...) view.accessibilityLabel = [NSString stringWithFormat:labelFormat, __VA_ARGS__] #else #define SetAccessibilityFormatedLabelForView(view, labelFormat, ...) #endif 

사용 나왔다 – Stavash

+0

매크로 때문에 경고하는 경우에 놀랄 것입니다. 그러나 어쨌든 나는 질문을 편집했습니다. – applefreak

+0

나는 놀랍다. 나는 "레이블"을 사용하지 않기 때문에 다른 옵션을 생각해 냈다. 나는 그 주위를 얻을 수 있습니까? – applefreak

답변

0

이 문제를 해결할 수 없습니다. 나는 아래처럼 미사용 변수 경고를 무시하고 끝났다.

SetAccessibilityFormatedLabelForView(myView, dynString, index); 
0

첫 번째는 잘못된 것입니다 RUN_TESTS가 정의되지 않은 경우, 다음 코드 때문에 :

NSString *str = [NSString stringWithFormat:dynString, index]; 
SetAccessibilityLabelForView(myView, str); 

가 확장됩니다 :

NSString *str = [NSString stringWithFormat: dynString, index]; 
-blank- 

매크로의 첫 번째 버전 (대신이 일을보십시오) :

SetAccessibilityLabelForView(myView, [NSString stringWithFormat: dynString, index]); 

RUN_TESTS가 정의 된 경우 확장됩니다.

myView.accessibilityLabel = [NSString stringWithFormat: dynString, index]; 

또는 그렇지 않은 경우 완전히 컴파일됩니다 (두 경우 모두 잘 작성해야 함).

+0

맞아요.하지만 RUN_TESTS가 정의되거나 정의되지 않은 경우에 모두 작동하도록하고 싶습니다. 업데이트 된 질문을 참조하십시오. 감사. – applefreak

+0

정의 된 내용으로도 작동합니다. 요점은 사용되지 않지만 실행되지 않는 테스트 상태에서 참조되는 변수가 있다는 것입니다. 당신이해야 할 일은 그것을 실제 매크로로 옮기는 것입니다. –

+0

나는 그것을했다. 그러나 그것은 나에게 오류를 준다 : "너무 많은 인수가 함수와 같은 매크로 호출에 제공된다"! 첫 번째 버전 .. – applefreak