[英]Use macro in C++
首先-对不起,我的英语不好:-(第二-我有一些有趣的任务。前言。程序将在ATMega162上运行。我们使用宏,因为函数工作非常缓慢。甚至是内联...任务。我有一个宏:
#define ProvSetBit(reg, bit) (((reg) & (1<<(bit))) != 0)
并检查位输入非常长且不可读的字符串:
ProvSetBit(SystemStatus[0], COMMAND_ON_DF);
和#define COMMAND_ON_DF 0u
我想修改它:
ProvSetBit(COMMAND_ON_DF);
其中COMMAND_ON_DF:
#define COMMAND_ON_DF (SystemStatus[0], 0u)
或那里的东西。 但这不起作用。 调试器写道:“错误[Pe054]:宏调用中的参数太少”。 你能给我什么建议?
如果一个函数实际上是内联的,那么它不能比执行相同操作的宏慢-它们导致相同的汇编。 与您发布的代码一样琐碎的函数几乎可以保证被内联。 您应该抛弃该宏,而应调查为什么编译器没有为您做内联-如果您没有传递正确的编译标志,请问吗?
如果您真正想要/必须使用宏,可以使用Boost.Preprocessor实现:
#include "boost/preprocessor/facilities/expand.hpp"
#define ProvSetBit(args) BOOST_PP_EXPAND(ProvSetBit_1 args)
#define ProvSetBit_1(reg, bit) (((reg) & (1<<(bit))) != 0)
#define COMMAND_ON_DF (SystemStatus[0], 0u)
int main()
{
ProvSetBit(COMMAND_ON_DF);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.