分析 chrome 源码中 WARN_UNUSED_RESULT 宏

简介: 问题今天浏览 chrome 源码时,发现了一个非常有意思的宏定义,它就是 WARN_UNUSED_RESULT ,用法如下图所示:
  • 目录
  • 问题
  • 解决
  • 结尾

问题

今天浏览 chrome 源码时,发现了一个非常有意思的宏定义,它就是 WARN_UNUSED_RESULT ,用法如下图所示:

网络异常,图片无法展示
|

分析之后,发现它其实就是 warn_unused_result 的变形,那么这个标识有什么作用呢?

解决

今天我们就来揭晓这个问题的答案。

首先,我们来看一下 chrome 源码中关于这个宏的定义,源码如下:

// Annotate a function indicating the caller must examine the return value.// Use like://   int foo() WARN_UNUSED_RESULT;// To explicitly ignore a result, see |ignore_result()| in base/macros.h.#undef WARN_UNUSED_RESULT#if defined(COMPILER_GCC) || defined(__clang__)#define WARN_UNUSED_RESULT __attribute__((warn_unused_result))#else#define WARN_UNUSED_RESULT#endif

通过定义,我们可以知道这个属性标识是可以被 gcc 和 clang 识别的。标识的作用是确保定义函数的返回值必须被使用,否则就会编译告警!

下面我们通过一个例子来看一下 标识的作用,代码实例如下:

intf1() __attribute__ ((warn_unused_result))
{
return1024;
}
classEmptyClass{
};
EmptyClassf2() __attribute__ ((warn_unused_result))
{
returnEmptyClass();
}
intmain()
{
// 不会引发告警intx=f1();
    (void) x;
f1(); // 引发警告f2(); // 引发警告return0;
}

执行如下编译命令:

g++ -Wall -Wextra warn_unused.cpp -o warn_unused_result

编译后的结果如下图所示:

网络异常,图片无法展示
|

输出信息:

**warn_unused.cpp:20:5:** **warning:** **ignoring return value of function declared with 'warn_unused_result' attribute**
**[-Wunused-result]**
    f1(); // 引发警告
**^~**
**warn_unused.cpp:21:5:** **warning:** **ignoring return value of function declared with 'warn_unused_result' attribute**
**[-Wunused-result]**
    f2(); // 引发警告

通过这段实例代码,我们可以看到 warn_unused_result 的作用还是非常明确的,而且使用也非常方便。

结尾

使用这个属性封装的宏的好处就是能够显式的要求开发人员必须使用指定方法的返回值,在某些情况下有利于问题的排查和定位。因此,在实际编程过程中,合理使用某些属性标识,能够解锁很多新技能。特别是学习别人的源码,对自己编程能力的提升也是一定帮助作用的。


作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!😄

目录
相关文章
|
Web App开发 开发者
Chrome 插件篇 - 已安装的crx插件源码查看,插件安装位置查看方法
Chrome 插件篇 - 已安装的crx插件源码查看,插件安装位置查看方法
1153 0
Chrome 插件篇 - 已安装的crx插件源码查看,插件安装位置查看方法
|
21天前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
135 9
|
6月前
|
Web App开发 SQL 前端开发
性能工具之前端分析工Chrome Developer Tools性能标签
【2月更文挑战第22天】性能工具之前端分析工Chrome Developer Tools性能标签
72 1
性能工具之前端分析工Chrome Developer Tools性能标签
|
Web App开发 JavaScript 前端开发
如何使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析?
数据挖掘和分析是当今互联网时代的重要技能,它可以帮助我们从海量的信息中提取有价值的知识,为我们的决策和行动提供支持。但是,有些网站的内容是通过Javascript动态生成的,这就给数据挖掘和分析带来了一定的难度。如何才能有效地获取和处理这些Javascript内容呢?本文将介绍一种简单而强大的方法,就是使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析。
135 0
如何使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析?
|
Web App开发 JavaScript
从Chrome源码看JS Object的实现
从Chrome源码看JS Object的实现
|
Web App开发 JavaScript 中间件
开发chrome插件auto reload原理分析
开发chrome插件auto reload原理分析
493 0
chrome17-使用network进行详细分析
chrome17-使用network进行详细分析
175 0
chrome17-使用network进行详细分析
chrome18-使用network waterfall分析页面载入性
chrome18-使用network waterfall分析页面载入性
304 0
chrome18-使用network waterfall分析页面载入性
|
Web App开发 资源调度 JavaScript
使用 Chrome 调试 Vue3 的 TypeScript 源码
相信很多同学都已经上手 Vue3 了,用起来是真香
491 0
使用 Chrome 调试 Vue3 的 TypeScript 源码
|
Web App开发 缓存 前端开发
前端答疑-chrome开发者工具正确食用-看网页源码
写这个文章,是因为在今天早上,有两个兄弟找我要源码。有图有真相。 我震惊于都 9102年了,身为了一个正(xie)经(xin)前端er,还不会看控制台?
315 0
前端答疑-chrome开发者工具正确食用-看网页源码

热门文章

最新文章

下一篇
无影云桌面