c – 海湾合作委员会第七次会议, – 明显的通过警告,以及清除它们的便携方式?

我们正在接受来自GCC 7的警告,因为它在switch语句中是隐含的.以前,我们在Clang下清除它们(这是下面评论的原因):

g++ -DNDEBUG -g2 -O3 -std=c++17 -Wall -Wextra -fPIC -c authenc.cpp
asn.cpp: In member function ‘void EncodedObjectFilter::Put(const byte*, size_t)’:
asn.cpp:359:18: warning: this statement may fall through [-Wimplicit-fallthrough=]
    m_state = BODY;  // fall through
                  ^
asn.cpp:361:3: note: here
   case BODY:
   ^~~~

GCC manual声明使用__attribute __((fallthrough)),但它不可移植.该手册还指出“……也可以添加一个通过注释来消除警告”,但它只提供FALLTHRU(这真的是唯一的选择吗?):

switch (cond)
  {
  case 1:
    bar (0);
    /* FALLTHRU */
  default:
    …
  }

对于Clang和GCC,是否有通过警告来清除坠落的便携方法?如果是的话那么它是什么?

解决方法:

海湾合作委员会希望标记评论在自己的行上,如下所示:

  m_state = BODY;
  // fall through
case BODY:

标记也必须在案例标签之前;没有干预的闭合支撑}.

堕落是GCC认可的标志之一.这不仅仅是FALLTHRU.有关完整列表,请参阅-Wimplicit-fallthrough option的文档.另请参阅此posting on the Red Hat Developer blog.

(这也应该与Clang兼容,虽然我无法通过当前主干(r308163)发出切换 – 通过警告来验证这一点.)

请注意,仅当编译器实际看到注释时,才使用带标记注释的警告.如果预处理器单独运行,则需要指示它保留注释,如-C option of GCC所示.例如,要避免使用ccache发出虚假警告,您需要在编译时指定-C标志,或者使用最新版本的ccache使用keep_comments_cpp选项.

上一篇:php – 通过allow_url_fopen = 0 in的服务器配置


下一篇:脚本运行正常,但抛出警告ResourceWarning: unclosed