gpt4 book ai didi

c++ - 如何停止优化器丢弃未使用的变量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:36 25 4
gpt4 key购买 nike

我想调试我的代码,但无法访问进程中的内部层,因为这会干扰与硬件的通信。 (在监视列表会干扰基本读取访问的情况下执行 volatile 操作。)

所以我正在测试接口(interface)的返回值,但 IAR 编译器甚至优化了未使用的 volatile 变量。

和这样的声明:

i = object.foo();
if (i)i=i;

也没有帮助。

我在 SO 上找到的只是回答了该情况下使用 i/o 操作的建议。但这也不是一个选择,因为我没有包含 C 标准库的选项。并且项目本身不需要 i/o,没有自己的输入/输出函数变体。

那么除了禁用优化器,我还有什么选择呢?

最佳答案

最可靠的方法是在您的链接器文件中找到一个强制某个变量被链接的设置。但这当然完全取决于系统。

否则,可移植的标准解决方案就是简单地在代码中的某处编写(void)i;。这适用于大多数编译器。如果没有,您可以更进一步:

#ifdef DEBUG_BUILD
volatile int dummy;

// all variables you would like to have linked:
dummy = i;
dummy = j;
...
#endif

或者如果你喜欢晦涩难懂的宏:

#define FORCE_LINKING(x) { void* volatile dummy = &x; }

(void* 因为它是通用类型,适用于各种变量。* volatile 使指针本身易变,这意味着禁止编译器优化写入它。)

关于c++ - 如何停止优化器丢弃未使用的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32607819/

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