小编Hom*_*ave的帖子

为什么内联函数也需要原型(MISRA C 2012 规则 8.4)

假设有一个 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:

  1. Misra_c_2012_rule_8_4_violation:函数定义没有可见的原型。

我不明白为什么内联函数也需要原型。谢谢。

c misra

2
推荐指数
1
解决办法
131
查看次数

[[maybe_unused]] 对于一个函数

我不太明白[[maybe_unused]]函数本身何时有用。

通过阅读论文,它只说该属性可以应用于函数的声明。我的问题是,如果这意味着编译器将对未使用的函数发出警告,那么对于库的任何公共标头,所有内容都应该具有避免警告的属性,因为用户可能只使用库的一部分。

我的理解正确吗?

谢谢。

c++

1
推荐指数
1
解决办法
960
查看次数

为什么非易失性 T 从易失性 T 到 T 的转换应该是不平凡的?

    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并不简单,因为易失性类型可能需要不同的复制方法。

但是,我不太明白为什么具有用户提供的从易失性 TT转换的非易失性类型T 也应该被认为是不平凡的?

任何评论将不胜感激。

c++ constructor volatile

1
推荐指数
1
解决办法
91
查看次数

标签 统计

c++ ×2

c ×1

constructor ×1

misra ×1

volatile ×1