【问题标题】:How to avoid helper functions being warned? " xxx defined but not used"如何避免辅助函数被警告? “ xxx 已定义但未使用”
【发布时间】:2012-05-27 14:46:25
【问题描述】:

我从这篇文章中学到了在命名空间中创建辅助函数。 'Helper' functions in C++

//stringhelper.hpp
namespace utility{
static std::string intToString(int integer)
{
    std::stringstream sstream;
    sstream << integer;
    return sstream.str();
}
static void toLowerCase(std::string& y)
{
    std::transform(y.begin(), y.end(), y.begin(), (int(*)(int))tolower);
}
}

我包含此标题,但收到以下警告

'void utility::toLowerCase(std::string&)' defined but not used  

是的。我使用了 intToString(int integer) 但没有使用 toLowerCase(std::string&)。我不想看到这些警告或为每个标题划分一个辅助函数。

谁能提出一个好的解决方案?我应该禁用警告吗?谢谢

【问题讨论】:

  • 你的编译器是什么?警告及其启用和禁用是特定于编译器的。
  • 当然是 GCC。没有其他编译器会关心。
  • 鉴于您使用它们的方式(包括从头文件中,因此它们在每个翻译单元中具有相同的定义),将它们设为inline 而不是static 会更有意义。你有什么特别的原因要给他们内部联系吗?

标签: c++


【解决方案1】:

您可以选择关闭该警告:

-Wno-unused-function

在逐个函数的基础上,使用 GCC,您可以定义:

void whatever () __attribute__ ((unused));

void whatever () {
    stuff;
}

这告诉 GCC 该函数可能未被使用。

有关属性的更多信息,请参阅compiler docs

【讨论】:

  • "OrgnlDave。此方法有效。但是,当我想组合定义时,编译器返回“函数定义上不允许属性”的错误。例如,此定义返回错误:static void toLowerCase (std::string& y) 属性 ((未使用)){ std::transform(y.begin(), y.end(), y.begin(), (int(*)( int))tolow); }
  • 辅助函数的实现写在header中。我没有单独的 cpp 文件。
  • @Mickey 没关系,你可以声明签名,然后如果你想直接在下面实现,就像我展示的一样
  • 我已经更改了与您的演示相同的标题功能。只是好奇。这两条线可以连在一起吗?
  • @Mickey 由于我通常编写跨平台代码,所以我在 GCC 中没有过多考虑 属性,但我不这么认为。函数属性适用于许多事情,例如,强制内联或不内联,因此将它们放在声明中而不是实现中是有意义的。但我又不是这方面的专家。从文档中我看不出有办法这样做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多