2011-08-18 3 views
3

저는 C에서 경험이 없으므로이 C/objective-C 프로젝트의이 문장에 만족하지 않습니다.Objective-C 프로젝트의 #define 문에 대한 질문

#define CBLog(...) NSLog(@"%s [%ld]: %@", basename(__FILE__), __LINE__, [NSString stringWithFormat:__VA_ARGS__]) 

질문 :

  1. 3 점 (...))은 CBLog을 (표시하기 위해 사용하는 파라미터와 방법 있습니까? 그게 무슨 뜻이야?

  2. % ld는 줄 형식을 의미합니까? % ld의 d는 무엇입니까?

  3. FILE, LINEVA_ARGS는 C 디버거의 기본 대체 토큰입니까?

감사

답변

5

... 매크로는 인수를 무제한으로 받아들이는 것을 의미한다.

%ld은 10 진수가 실제로 정수를 의미하는 'long decimal'을 의미하는 문자열 포맷터입니다.

__FILE__

__VA_ARGS__ 매크로에 전달되는 인수로 확장 현재 행 번호로 확장 현재 파일 이름

__LINE__로 확장됩니다.

디버거는 아무 관련이 없습니다. 이 모든 것은 문자열 형식 인 %ld을 제외하고 전 처리기입니다.

2
  1. 은 임의의 수의 인수가 주어질 수 있음을 의미합니다.
  2. %ldsigned long을 의미하지만 서명 된 줄 번호를 본적이없는 것처럼 조금 이상합니다.
  3. __FILE__은 현재 소스 파일의 파일 이름입니다. __LINE__은 현재 행 번호입니다. __VA_ARGS__은 매크로에 주어진 인수입니다.