首页 > 解决方案 > 预处理器宏的 G++ 未使用标签警告

问题描述

我正在处理项目中的编译器警告,试图清理代码,而让我感到困惑的一个警告/错误是unused-label对以下代码的警告。

STATE(initialize)

它说“初始化”标签已定义但未使用。STATE是一个#define宏,如下所示:

#define STATE(x)    x: __TRACE__("enter", #x);

宏如下__TRACE__

#define __TRACE__(y,x) dbg.printf(DebugIO::debug2,"FSM:" y "(" x ")\n");

请注意,我没有编写此代码,只是在完成一个项目,试图尽可能多地纠正警告。但据我所知,initialize标签被传递到__TRACE__它用作printf()调用参数的地方。

那么,为什么不使用它呢?编译器是否不查看预处理器指令以使用变量?

我将如何纠正这一点?

标签: c++

解决方案


警告的真正原因是

x: TRACE...

介绍要与 一起使用的标签goto。有理由认为没有goto初始化状态(看起来我们正在查看 FSM 实现)。

如果不重新设计框架,可能无法删除此警告(例如,添加一个特殊的状态宏,它不会为您从未进入的状态定义标签),但也可以只为项目消除此特定警告.


推荐阅读