Как продублировать макрос C? - PullRequest
1 голос
/ 27 марта 2012

Я хочу создать макрос C (TRAMPOLINE_BLOCK), который принимает предопределенную макро константу (TRAMPOLINE_LENGTH) и записывает столько инструкций asm volatile nop.Например:

#ifdef __x86_64__
    #define TRAMPOLINE_LENGTH 41
    #define TRAMPOLINE_BLOCK  \
        ({ \
            asm volatile ( \
                    "nop\n" \
                    ...
            );\
        })
#else
    #define TRAMPOLINE_LENGTH ...
    #define TRAMPOLINE_BLOCK ...
#endif

В этом случае TRAMPOLINE_BLOCK должно содержать 41 nop инструкций.Я играл с макро-аргументами и тому подобным, но пока не получилось.Как мне написать такой макрос?

1 Ответ

1 голос
/ 27 марта 2012

Делать это самостоятельно относительно сложно.

P99 имеет макрос P99_DUPL, который позволяет вам делать то, что вы хотите

 P99_DUPL(41, TRAMPOLINE_BLOCK)

должен сделать свое дело. Для этого вам нужен совместимый с C99 компилятор.

...