c - 如何复制 C 宏?

标签 c gcc macros c-preprocessor

我想制作一个 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 指令。我一直在玩弄宏观参数之类的东西,但还没有让它发挥作用。我将如何编写这样的宏?

最佳答案

自己做比较复杂。

P99有一个宏 P99_DUPL 允许你做你想做的事

 P99_DUPL(41, TRAMPOLINE_BLOCK)

应该可以解决问题。为此,您需要一个符合 C99 标准的编译器。

关于c - 如何复制 C 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9889723/

相关文章:

c - 让 gcc 以 "int 0x80"方式编译系统调用?

RuSTLang : Adding a return statement in a macro

javascript - 如何使用 sweet.js 编译多个文件?

c - 设置位的宏扩展

c argv[计数]+2

c - 为什么第二个 malloc 在这种情况下会失败?

c - 终端仿真器通过 UART ATmega328p 从未知源接收字节

c++ - GCC6.3.0 : flag "--coverage" not functioning (no gdca files generated)

linux - 在 fedora 上运行 gcc 获取 AVR

java - 在屏幕上非线性滑动