c++ - 生成的代码中带有新行的 C 宏

标签 c++ c visual-studio macros

我需要扩展成多行代码的宏。例如:

#define foo(...)
foo(something, something_else, ...)
...

应转换为:

something
something_else
...

而不是:

something something_else ...

另外,如果您想知道我为什么需要这样的东西。我需要生成这样的代码,新行是内联汇编语法的一部分。

_asm
{
    mov eax, 3
    div 5
}

我对实现此目标的任何形式都很感兴趣,因此欢迎提出所有建议。

阅读后的一个想法this answer .是否可以为新行创建一个宏并调用 foo(something, NL, something_else, NL, ...)


我也对可变版本更感兴趣,但了解更简单的版本也可能有所帮助。

最佳答案

这可能会提供一点帮助,只是给你一个想法

    #include "stdio.h"
    #define EXPAND_MULTIPLE_LINES(X, Y, Z) /*
    */ X /*
    */ Y /*
    */ Z

    int main()
    {
        int X, Y, Z;
        EXPAND_MULTIPLE_LINES(X, Y, Z);
        return 0;
    }

使用 gcc -E -CC testMacro.c

输出像

     # 844 "/usr/include/stdio.h" 3 4

     # 2 "testMacro.c" 2
     # 12 "testMacro.c"
     int main()

     {

          int X, Y, Z;
          /*

          */ X /*
          */ Y /*
          */ Z;
          # 18 "testMacro.c"
          return 0;
     }

关于c++ - 生成的代码中带有新行的 C 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31648349/

相关文章:

C++ : DirectX Texture is Misaligned/Shifted

c++ - 为什么断言宏的定义在发布版本中不能只是 `#define assert(expression) 0` ?

c - AVR gcc,奇怪的数组行为

C 宏将函数名称与预定义的名称列表进行比较

c++ - #define 预处理器指令可以包含 if 和 else 吗?

c++ - 类模板中未发生隐式转换

c++ - OpenGL 阴影贴图 - 阴影贴图纹理根本没有被采样?

c++ - 按顺序显示字符串 - 练习题

c++ - 我如何在 Visual C++ 中表示巨大的 float

c - getchar() 在打印一个值后停止