gpt4 book ai didi

c++ - 调试代码和 C++ 未使用参数警告

转载 作者:太空狗 更新时间:2023-10-29 21:42:01 25 4
gpt4 key购买 nike

我已经搜索了C/C+未使用变量警告的解决方案,但没有一个符合我的需要。情况是这样的:

我正在PC上开发算法,然后将其移植到真正的嵌入式平台上。 PC 版本将具有调试代码,可在 PC 的监视器上显示图像。不幸的是,嵌入式平台没有显示器。当然嵌入式平台根本不需要那些调试代码。

为了区分代码,我们可以这样做:

#ifndef EMBEDED
MyDebugCode(parameter1, parameter2, parameter3);
#endif

但是,我认为这太糟糕了,因为这些调试函数的调用太多了。那些 EMBEDED 条件语句会污染代码。相反,我尝试在调试函数中编写条件编译标志,如下所示:

inline void MyDebugCode(type1 p1, type2 p2, type3 p3)
{
#ifndef EMBEDED
DisplaySomethingOnMonitor(p1, p2, p3);
...
...
...
#endif
}

这样我就可以在函数中编写一次#ifndef/#ifdef,然后在没有那些#ifndef/#ifdef的情况下多次调用它。

现在当 EMBEDED 被定义时,我们将得到未使用的变量 p1p2p3。这就是问题所在。

此外,我希望 inline 可以完全优化整个调试功能,就好像它不存在一样,当 EMBEDDED 被定义时。不过这是次要的。

谁有更好的解决方案/实践?

请注意,这些参数可以是对类实例的引用。

编译器是g++

最佳答案

如果您的编译器没有其他方法来禁用警告,这应该有效:

#ifdef EMBEDED
inline void MyDebugCode(type1, type2, type3) {}
#else
inline void MyDebugCode(type1 p1, type2 p2, type3 p3)
{
DisplaySomethingOnMonitor(p1, p2, p3);
...
...
...
}
#endif

任何合理的编译器都不应该对未使用的未命名参数发出警告,因为没有办法使用它们。

关于c++ - 调试代码和 C++ 未使用参数警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27436317/

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