热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

对于未使用的参数,什么是“更好的”:(x=x)或(void(x))?

好吧,我们都知道有时我们会获取函数的参数,但我们并没有真正使用它们。我们不想得到任何编译器警告,所以我们需要以某种方式“使用”但不真正使用这些参数。

好吧,我们都知道有时我们会获取函数的参数,但我们并没有真正使用它们。

我们不想得到任何编译器警告,所以我们需要以某种方式“使用”但不真正使用这些参数。

我们有两种选择:

#define UNUSED(x) (void)(x)


#define UNUSED(x) (x=x)

和一般,定义(x=x)void(x)在功能,即使没有#define

问题是:

其中哪一个是“更好的”?

更好的性能(更快),内存分配(如果有),任何你能想到的技术上的说法。

回答


(void)x是标准的一部分,所以应该更好。使用它时,您不会收到编译器/linters 警告。它也是可移植的,不像特定于实现的解决方案__attribute__((unused)),它不会生成任何代码。x = x可能会产生警告。

关于可以发出的警告的示例x=x

int foo(int bar)
{
bar = bar;
return 1;
}
int main()
{
return foo(2);
}

使用 Clang 10使用-Wall(或仅使用-Wself-assign)编译上述代码会触发以下警告:

$ clang test.c -Wall
test.c:3:9: warning: explicitly assigning value of variable of type 'int' to itself [-Wself-assign]
bar = bar;
~~~ ^ ~~~

短绒同样适用于cppcheck

$ cppcheck test.c --enable=all
Checking test.c ...
test.c:3:9: warning: Redundant assignment of 'bar' to itself. [selfAssignment]
bar = bar;
^
test.c:3:9: style: Variable 'bar' is assigned a value that is never used. [unreadVariable]
bar = bar;
^

当然,这些取决于您使用的工具和您启用的警告,因此它可能会或可能不会生成警告,但将表达式转换为void永远不会生成此类警告。






推荐阅读
  • 本文探讨了Linux环境下线程私有数据(Thread-Specific Data, TSD)的概念及其重要性,介绍了如何通过TSD技术避免多线程间全局变量冲突的问题,并提供了具体的实现方法和示例代码。 ... [详细]
  • 如何使用Maven将依赖插件一并打包进JAR文件
    本文详细介绍了在使用Maven构建项目时,如何将所需的依赖插件一同打包进最终的JAR文件中,以避免手动部署依赖库的麻烦。 ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • 本文详细介绍了如何在PyQt5中创建简易对话框,包括对话框的基本结构、布局管理以及源代码实现。通过实例代码,展示了如何设置窗口部件、布局方式及对话框的基本操作。 ... [详细]
  • 题目描述:Balala Power! 时间限制:4000/2000 MS (Java/Other) 内存限制:131072/131072 K (Java/Other)。题目背景及问题描述详见正文。 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 该问题描述了以不同价格购买三种类型的鸡(公鸡、母鸡和小鸡),使用100元恰好购买100只鸡的不同组合。具体而言,每只公鸡价值5元,每只母鸡价值3元,而每三只小鸡价值1元。问题是,如何用100元购买100只鸡,并找出所有可能的公鸡、母鸡和小鸡的组合。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • 本文详细探讨了PHP中使用const和define定义常量的方法及其差异。了解这些区别有助于开发者根据具体需求选择合适的方式定义常量。 ... [详细]
  • 题目概述:Sereja 拥有一个由 n 个整数组成的数组 a1, a2, ..., an。他计划执行 m 项操作,这些操作包括更新数组中的特定元素、增加数组中所有元素的值,以及查询数组中的特定元素。 ... [详细]
  • 本文介绍了如何使用 Python 的 Pyglet 库加载并显示图像。Pyglet 是一个用于开发图形用户界面应用的强大工具,特别适用于游戏和多媒体项目。 ... [详细]
  • 本文针对HDU 1042 N! 问题提供详细的解析和代码实现。题目要求计算给定整数N(0 ≤ N ≤ 10000)的阶乘N!。文章不仅提供了算法思路,还附上了C++语言的具体实现。 ... [详细]
  • 设计一个算法,用于计算给定字符串中出现的不同ASCII字符数量。该任务将重点考察字符串处理、集合操作以及基础的输入输出技术。 ... [详细]
author-avatar
手机用户2502922667
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有