繁体   English   中英

在C ++中使用宏

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM