Как сделать макрос, который возвращает строку в исходный код? - PullRequest
1 голос
/ 24 мая 2010

Пример: я хочу сделать это:

METHODNAME(5) {
    // do something 
}

, что приводит к:

- (void)animationStep5 {
    // do something 
}

Есть ли способ сделать это? По сути, мне нужен способ генерирования реальной строки исходного кода до компиляции программы, чтобы компилятор видел - (void)animationStep5 ...

Или, может быть, есть что-то отличное от макроса, которое может помочь здесь автоматически генерировать имена методов (не во время выполнения)?

Ответы [ 3 ]

2 голосов
/ 24 мая 2010

Как уже отвечали здесь , препроцессор target-C очень близок к препроцессору C.

Вы должны взглянуть на примеры, размещенные там, и взглянуть на C пропроцессор . Вам просто нужно будет использовать синтаксис препроцессора ##, чтобы объединить имя метода и номер, который вы хотите.

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

Вы можете использовать оператор конкатенации

#define METHODNAME(i) -(void)animationStep##i

Вы можете назвать его как

METHODNAME(5){}

Это расширяется до -(void)animationStep5{}

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

Предполагая, что препроцессор target-c ведет себя так же, как и стандартный C, вы можете использовать что-то вроде:

#define PASTE(a, b) a##b
#define METHODNAME(n) PASTE(animationStep,n)

для объединения требуемых битов.Это означает, что

METHODNAME(5)

переводится в

animationStep5

(вам может понадобиться добавить «void» из вашего вопроса в макроопределение в зависимости от того, что именно вам нужноделает).

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