我应该在函数声明或定义上放置 [[maybe unused]] 吗?
do I put [[maybe unused]] on function declarations or definitions?
C++17引入属性[[maybe_unused]].
我假设这是 GCC 和 Clang 的标准化版本:__attribute__((unused)).
对于我不想看到警告的未使用函数,
我应该在
上指定属性吗
函数声明?
void maybe_used_function() [[maybe_unused]];
或函数定义?
void maybe_used_function() [[maybe_unused]] {
/* impl */
}
两者之一?两个?
对标准化属性和编译器特定属性的影响是否相同?
我找不到任何关于放置行为以及常见做法的明确文档。
当我在定义中将属性放在函数体之前时,GCC 和 clang 给出错误:
void function();
int main(){}
void function() __attribute__((unused)) {}
警告:GCC 不允许在此位置使用 'unused' 属性
关于函数定义 [-Wgcc-compat]
void function() __attribute__((未使用)) {
但是属性可以放在另外两个地方不会报错:
__attribute__((unused)) void __attribute__((unused)) function() {}
也许这些方法之一是我应该如何在函数定义上使用属性?
来自 N4606,[dcl.attr.unused]¶4:
A name or entity declared without the maybe_unused
attribute can later be redeclared with the attribute and vice versa. An entity is considered marked after the first declaration that marks it.
由于函数定义是一个声明 ([dcl.dcl]¶1),这意味着您可以将它放在任何一个地方,并且它们的行为都是一样的。
(在这两个地方都允许是有意义的,因为该属性实际上只影响 定义,但因为该属性可以作为自我文档,它也是 permitted on the declaration.)[=12=]
都没有。
在
[[attr1]] void [[attr2]] f [[attr3]] () [[attr4]] {}
attr1
和 attr3
属于(或适用于)f
本身。
attr2
属于前面的类型,void
.
attr4
属于 f
的类型(“()
返回 void
的函数”),而不是 f
。
您希望 maybe_unused
属于 f
,因此您可以将其放在位置 1 或 3,而不是 2 或 4。
涵盖其余部分。
对于 GCC 的 __attribute__
,您必须查看其文档。
C++17引入属性[[maybe_unused]].
我假设这是 GCC 和 Clang 的标准化版本:__attribute__((unused)).
对于我不想看到警告的未使用函数,
我应该在
函数声明?
void maybe_used_function() [[maybe_unused]];
或函数定义?
void maybe_used_function() [[maybe_unused]] {
/* impl */
}
两者之一?两个?
对标准化属性和编译器特定属性的影响是否相同?
我找不到任何关于放置行为以及常见做法的明确文档。
当我在定义中将属性放在函数体之前时,GCC 和 clang 给出错误:
void function();
int main(){}
void function() __attribute__((unused)) {}
警告:GCC 不允许在此位置使用 'unused' 属性 关于函数定义 [-Wgcc-compat] void function() __attribute__((未使用)) {
但是属性可以放在另外两个地方不会报错:
__attribute__((unused)) void __attribute__((unused)) function() {}
也许这些方法之一是我应该如何在函数定义上使用属性?
来自 N4606,[dcl.attr.unused]¶4:
A name or entity declared without the
maybe_unused
attribute can later be redeclared with the attribute and vice versa. An entity is considered marked after the first declaration that marks it.
由于函数定义是一个声明 ([dcl.dcl]¶1),这意味着您可以将它放在任何一个地方,并且它们的行为都是一样的。
(在这两个地方都允许是有意义的,因为该属性实际上只影响 定义,但因为该属性可以作为自我文档,它也是 permitted on the declaration.)[=12=]
都没有。 在
[[attr1]] void [[attr2]] f [[attr3]] () [[attr4]] {}
attr1
和attr3
属于(或适用于)f
本身。attr2
属于前面的类型,void
.attr4
属于f
的类型(“()
返回void
的函数”),而不是f
。
您希望 maybe_unused
属于 f
,因此您可以将其放在位置 1 或 3,而不是 2 或 4。
对于 GCC 的 __attribute__
,您必须查看其文档。