有谁知道为什么这在语法上是错误的?
我试图隐瞒这个

    #define OUTS_FROM_FP(_fp, _argCount) ((u4*) ((u1*)SAVEAREA_FROM_FP(_fp) - sizeof(u4) * (_argCount)))


对此

    #define OUTS_FROM_FP(_fp, _argCount) {\
    ((u4*) ((u1*)SAVEAREA_FROM_FP(_fp) - sizeof(u4) * (_argCount))); \
    cout<<"Hello World"<<endl;  \
    }

    outs = OUTS_FROM_FP(fp, vsrc1); --this is how it is being called


运行此命令时,我会遇到很多错误:它们始于声明未使用的传递给宏的变量的语句

最佳答案

展开后,原始宏将如下所示:

outs = ((u4*) ((u1*)SAVEAREA_FROM_FP(fp) - sizeof(u4) * (vsrc)));


(据我所知,您没有提供太多上下文),这是有效的代码。

您修改后的宏将相同的语句扩展为:

outs = { /* ... */ };


尝试将代码块分配给变量时,编译器会引起各种混乱。

除了一般情况下有关宏使用的所有常见警告外,您可以使用逗号运算符来使修改后的宏“起作用”:

#define OUTS_FROM_FP( _fp, _argCount ) \
    cout << "Hello world\n", \
    ((u4*) ((u1*)SAVEAREA_FROM_FP(_fp) - sizeof(u4) * (_argCount)))


(输出放在第一位,因为用逗号运算符分隔的语句对最后一条语句的结果求值-将输出放在第一位使该宏仍然求得与原始宏相同的值。)

总而言之,最好将宏转换为函数。

关于c++ - C中的多行宏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43210381/

10-10 09:39