2013-03-24 2 views
0

다음 매크로는 구문 분석 오류를 발생시킵니다. 위선적 인 말투는 여기에서 볼 수 없습니다.objective c 매크로가 작동하지 않습니다.

#define adjust(tag, x, y) if (self.tag==tag) { origin.x += x; origin.y += y; return origin; } 

    .... 

adjust(20, 28, 265) 

편집 :

덕분에 지금까지 도움을 많이. 첨부 된 스크린 샷을보십시오. 코드 가독성을 높이기 위해 매크로 확장을 사용하고 싶습니다. 그것의 아주 지역 사용, 따라서 위험 없음 또는 등

enter image description here

+0

은 구조체 구조체입니까? 또는 이것은 Rect의 일부입니까? –

+0

무엇이 오류입니까? –

+1

문제는'if (self.tag == tag)'가'if (self.20 == 20)'로 확장되면 가능한 중복 된 질문을 비교하는 것입니다. –

답변

2

귀하의 매크로는 교체의 범위에 존재하지 않는 경우 정의되지 않은 속성 origin를 의미, 컴파일러 오류가 발생합니다 재사용 매크로가 확장 된 후 사실, 매크로 전체가 모듈화되지 않습니다. 예를 들어,

  1. 매크로 확장이
  2. 를 완료 한 후이 발생하고 특별한 의미가없는 경우 컴파일이 실패 할 것인가
  3. 매우 상황이 될 것이라고 속성입니다 tagself에 대한 참조를 가지고
+0

+1 나는 매크로 모듈이 없음을 인정하고 동의합니다. 컴파일러 오류의 실제 원인은'self.tag'의'self.20' 로의 원치 않는 확장입니다. 정의되지 않은 속성'origin'이 아닙니다. 내 의견을 참고하십시오. –

+1

같은 –

+0

@ MartinR - 예, 동의합니다. 어떤 경우 *** 후 *** 나는 내 대답을 게시 질문에 수행 된 편집은 로컬 매크로 범위 등의 위험을 보여줍니다. – Perception

관련 문제