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

时间:2015-07-27 08:33:10

标签: 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, ...)

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

1 个答案:

答案 0 :(得分:0)

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

    #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;
     }