有谁知道为什么这在语法上是错误的?
我试图隐瞒这个
#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/