c - C 中的 __unused 属性有什么意义?
问题描述
我有个问题。假设您在 C 中定义了一个函数或变量。如果您不使用它,编译器会生成一个警告,指出该变量/函数没有被使用。要抑制警告,请__unused
在声明之前使用属性。如果必须使用它,首先声明函数/变量有什么意义?使用有什么好处__unused
?
解决方案
__unused
通常是扩展为 C 语言扩展的宏。不过,C23 会给我们[[maybe_unused]]
,标准自带一个例子:
例子
[[maybe_unused]] void f([[maybe_unused]] int i) { [[maybe_unused]] int j = i + 100; assert(j); }
鼓励实现不要诊断
j
未使用的内容,无论是否NDEBUG
已定义。
也就是说,assert()
宏将在 中展开为空NDEBUG
,这意味着编译器会认为j
未使用。
当然,另一种方法是将整个j
定义(以及可选的用法)放在#ifdef
“块”中,但在这种情况下会很麻烦。此外,如果你这样做,那么i
将是未使用的,等等。
还有其他用例,例如未使用的函数参数,如果您想保留它们的名称并避免使用(void)x;
技巧,在某些情况下处理混淆的优化器/编译器,编译器/链接器看不到的符号的外部使用等。
推荐阅读
- python - 如何使用 pysparkSQL 将字符串传输到字典
- cmake - 仓库清理
- c# - Asp.Net 在带有自动生成列的 GridView 中的代码隐藏编辑值中查找
- php - 如何访问数组中的元素?
- machine-learning - 数据集的所有图像中是否存在特定对象会影响 CNN 的性能
- load - 在 Docker 环境中安装 netdata 时经常出现高 cpu 负载
- ios - 选择 Image 或 Take Photo 并转到新的 ViewController
- javascript - 2 $http 获取函数
- scala - 根据 Spark Scala 中的列条件获取最新信息不起作用
- php - 如何在 PHP 中创建对象?