在调试一些嵌入式代码时,我遇到了类似这样的事情:
buffPtr = &a[5];
buffEndPtr = &a[10];
while (buffPtr != buffEndPtr)
{
*buffPtr = 0xFF;
buffPtr = &buffPtr[1]; /* MISRA improvement for: buffPtr++ */
}
Run Code Online (Sandbox Code Playgroud)
为什么这个结构会改进(*buffPtr)++?
如何使用if语句验证任何变量中是否包含任何值?我正在寻找类似的东西:
if "foo","bar","spam","eggs" in test1,test2:
Run Code Online (Sandbox Code Playgroud)
如果在任何test1,test2变量中找到四个值中的任何一个,则返回true.test1,test2应该是什么类型的?
稍后编辑:如果我有一个列表,那将会是这样的:
test1=['foo','abc','def']
if {'foo', 'bar', 'spam', 'eggs'} in test1
Run Code Online (Sandbox Code Playgroud) 我正在使用支持C++ 11的ARM微控制器和编译器
我有一个类描述如下:
class commands
{
public:
string cmd_str;
void (*fktPtr)(void);
};
Run Code Online (Sandbox Code Playgroud)
diag对象是Diag类的一部分
class Diag
{
public:
void reset(void);
}
Diag diag;
Run Code Online (Sandbox Code Playgroud)
切换功能是代码中的独立功能:
void toggle_pin(void);
Run Code Online (Sandbox Code Playgroud)
然后我定义了一个名为cmdlist的命令向量:
vector<commands> cmdlist = {
{"togg", toggle_pin }, // this works
{"rst", diag.reset}, // this gives an error. why ?
{"rst1", [](){diag.reset();}}, // this also works
}
Run Code Online (Sandbox Code Playgroud)
错误:
main.cpp:81:1: error: could not convert '{{"togg", toggle_pin}, {"rst", diag.Diag::reset}}, {"rst1",<lambda closure object><lambda()>{}} from '<brace-enclosed initializer list>' to 'std::vector<commands>'
Run Code Online (Sandbox Code Playgroud)
为什么初始化列表不支持来自对象的方法,而是支持常规函数/ lambda函数?