Может ли макрос также генерировать имя метода? - PullRequest
0 голосов
/ 24 мая 2010

Является ли допустимым использование макроса для создания имени метода? Я имею в виду ... на самом деле это просто простая замена текста перед тем, как компилятор действительно запустится, верно?

Ответы [ 2 ]

1 голос
/ 24 мая 2010

Да, это действительно;раскрытие макроса происходит еще до того, как компилятор прочитает код.Основным ограничением является то, что нельзя включать директиву препроцессора в директиву препроцессора.Так, например:

// This is ok:
#define PREFIX(X) this_name_is_prefixed_ ## X
// ...
- (void) PREFIX(doSomething):id;
// ...

// But this isn't:
#define IMPORT(X) #import X
IMPORT(<Foundation/Foundation.h>) // <= Don't expect this to work

За исключением директивы "#import", препроцессор Objective-C в основном такой же, как препроцессор C .(«#Import» похож на «#include», за исключением того, что «#import» подразумевает включение только один раз, поэтому защита заголовков препроцессора не требуется для заголовков, которые включены только в «#import»).

1 голос
/ 24 мая 2010

Ничто не мешает этому. Он даже широко используется (хотя я не знаю, для iphone), например, в реализации драйверов устройств. В этом случае макросы используются для генерации шаблонного кода, и для этого эталона для связи с вашим кодом необходимо либо угадать правильные имена функций (не рекомендуется), либо использовать генерацию макросов, например USB_ATTACH(uthum) для генерации подписи метода присоединения для драйвера uthum.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...