Вопрос о #define утверждении в проекте Objective-C - PullRequest
3 голосов
/ 18 августа 2011

У меня нет опыта работы с C, поэтому я не доволен этим утверждением в этом проекте C / target-C.

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

Вопросы:

  1. 3 точки (...) используются для обозначения CBLog () - это метод с параметрами? Что они означают?

  2. % ld обозначает формат строки? для чего d в% ld?

  3. FILE , LINE и VA_ARGS являются токенами замены по умолчанию для отладчика C?

спасибо

Ответы [ 2 ]

5 голосов
/ 18 августа 2011

... означает, что макрос принимает любое количество аргументов.

%ld - формататор строк, означающий «длинное десятичное число», где десятичное действительно означает целое число.расширяется до текущего имени файла

__LINE__ раскрывается до текущего номера строки

__VA_ARGS__ расширяется до аргументов, передаваемых в макрос.делать с этим.Все это препроцессор, кроме %ld, который является форматированием строки.

2 голосов
/ 18 августа 2011
  1. ... означает, что может быть задано любое количество аргументов.
  2. %ld означает signed long, хотя это немного странно, поскольку я никогда не видел номеров строк со знаком.
  3. __FILE__ - имя файла текущего исходного файла.__LINE__ - текущий номер строки.__VA_ARGS__ - аргументы, данные макросу.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...