gpt4 book ai didi

c++ - 如何确保在不满足条件时不运行特定代码

转载 作者:太空狗 更新时间:2023-10-29 20:37:09 24 4
gpt4 key购买 nike

我在嵌入式系统上使用 C/CPP,在我的代码中,我有一些部分是从一些“无效”的内存中运行的,并且在满足某些条件之前不得被调用。

为简单起见:
假设 foo() 是这样的函数,并且在 g_isMemoryValid == false

时无效

除了 foo() 之外,在无效内存部分还有几个其他函数,每个函数都来自所有模块。

我的问题是找到我输入无效部分的所有实例并验证我没有错过任何电话!

如何确保运行 foo() 的所有分支都满足 g_isMemoryValid == true


解决方案应该输出:
跳转到代码(或指令地址)的行,但即使它只会发出模块名称,
或者 hell ...... [OK, NOT_OK] 会做:)

注意:即使只解决部分场景的解决方案也可以!


请注意,除了简单的 if(g_isMemoryValid) 包装器之外,还有许多场景,例如调用链接调用函数本身不会在不满足条件或分支的某些不同语法时调用

if (g_isMemoryValid) 
foo(); // should pass

if (!g_isMemoryValid)
return;
foo(); // should pass too

最佳答案

至少在我看来,一个比宏更优雅的解决方案是使用函数指针:

#include <stdio.h>

// The real foo()
void foo()
{
puts("OK");
}

// Handle 'invalid' memory (error message?)
void mem_invalid()
{
puts("Not OK");
}

typedef void (*foo_t)();

foo_t foo_ptr = &mem_invalid;

void main(void)
{
// Memory is 'invalid', calls error routine
foo_ptr();
...

// Memory became good somehow
foo_ptr = &foo;
...

// Call now succeeds
foo_ptr();
}

这使用函数指针代替标志。

根据您的嵌入式系统,间接函数调用可能会产生一些开销,但除非它位于内部循环等关键区域,否则应该不是问题。错误处理程序甚至不需要执行任何操作 - 或者它可以像您喜欢的那样复杂。

关于c++ - 如何确保在不满足条件时不运行特定代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35725557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com