假设有一个 C 头文件:
//void test(void);
inline void test(void) {}
Run Code Online (Sandbox Code Playgroud)
如果我们注释掉第一行,MISRA C 检查器会抱怨
类型:MISRA C-2012 声明和定义(MISRA C-2012 规则 8.4,必需)分类不可用。标头.h:3:
- Misra_c_2012_rule_8_4_violation:函数定义没有可见的原型。
我不明白为什么内联函数也需要原型。谢谢。
我不太明白[[maybe_unused]]函数本身何时有用。
通过阅读论文,它只说该属性可以应用于函数的声明。我的问题是,如果这意味着编译器将对未使用的函数发出警告,那么对于库的任何公共标头,所有内容都应该具有避免警告的属性,因为用户可能只使用库的一部分。
我的理解正确吗?
谢谢。
struct T {
int a;
T() = default;
T(const T &) = default;
T(const volatile T &src) { a = src.a; }
};
Run Code Online (Sandbox Code Playgroud)
如果我们不提供采用 cvref 参数的复制构造函数,那么T就很简单,否则就不是这样。
按照 C++ 标准,看起来这是预期的。
我可以理解易失性 T并不简单,因为易失性类型可能需要不同的复制方法。
但是,我不太明白为什么具有用户提供的从易失性 T到T的转换的非易失性类型T 也应该被认为是不平凡的?
任何评论将不胜感激。