- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在一些新项目中愉快地使用了 __attribute__((warn_unused_result))
一段时间。我一直在使用 Vim 进行编码。
现在我有时在开发同一个项目时开始使用 KDevelop,并且有一个自动完成 __attribute_warn_unused_result__
(以及其他)以及我正在使用的 __attribute__
.
这两个 __attribute__((warn_unused_result))
和 __attribute_warn_unused_result__
是否相同?其中任何一个应该取代另一个吗?我意识到,在编辑标题 (*.h
) 时,自动完成功能会建议两种选择,但在编辑源 (*.c
) 时,该功能只会建议__attribute_warn_unused_result__
。
最佳答案
GCC 自 3.4 起支持此属性,因此 __attribute_warn_unused_result__
定义为 __attribute__((warn_unused_result))
或为空取决于 GCC 版本(参见 sys/cdefs.h
)。
在您的编程系统中搜索 __attribute_warn_unused_result__
定义。
更新:
属性 warn_unused_result
是编译器的一个特性。自 3.4 以来的任何 GCC 编译器都将识别并使用 __attribute__((warn_unused_result))
。但是其他编译器可能不支持此功能,或者可能以其他方式指定。
另一方面,库头文件中定义的__attribute_warn_unused_result__
宏。目的——为不受支持的编译器删除属性的能力;隐藏实现细节并以另一种方式指定此属性。
但是这个宏依赖于库的实现。例如,宏在 arm-none-eabi-gcc 4.9.3 和 avr-gcc 4.9.2 包中根本不存在,就像我仍然在一个“古老”项目中使用的 mingw32-gcc 3.4.2 一样。
对于 gcc-linaro-7.2.1-2017.11-x86_64_arm-eabi 类似用途的宏定义为
#define __result_use_check __attribute__((__warn_unused_result__))
但在 gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf 包中,定义(整个 sys/cdefs.h 文件)与 Ubuntu 16.04 中的“原生”gcc 相同。
#define __attribute_warn_unused_result__ \
__attribute__ ((__warn_unused_result__))
因此,哪种方法取代另一种方法取决于目标。在我看来:
对于应该在多个平台上与 GCC (>= 3.4) 一起使用的代码,最好使用显式 __attribute__((__warn_unused_result__))
。
对于应该由多个可能不支持此功能或可能以不同方式支持此功能的编译器编译的代码,最好使用一些宏(甚至可以是自定义的)。
对于已经存在的项目,最好使用当前代码中最常用的方法:-)
关于头文件和源文件的不同行为的自动完成。我不知道。可能只是特定 IDE 的独创性(自动完成)。
关于c - __attribute_warn_unused_result__ 与 __attribute__((warn_unused_result)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53169938/
GCC 支持使用属性 warn_unused_result 声明方法,这样任何不保存方法返回值的调用者都会收到警告。 Java 有没有类似的功能? 最佳答案 不,Java 没有这样的功能。 这可以通过
我目前正在研究一个 React Native 项目。从字面上看,我刚刚开始在 XCode 中遇到这个错误。 我已经做了大量的谷歌搜索无济于事。有没有人经历过这个?更重要的是,有人有解决方案吗? 最佳答
在一些新项目中愉快地使用了 __attribute__((warn_unused_result)) 一段时间。我一直在使用 Vim 进行编码。 现在我有时在开发同一个项目时开始使用 KDevelop,
我一直在努力寻找这在我的代码中不起作用的原因 - 我认为这应该起作用。以下是头文件的摘录: #define WARN_UNUSED __attribute__((warn_unused_res
我们开始在我们的 Objective-C 代码中对所有 becomeFirstResponder 函数调用发出此警告。 Ignoring return value of function declar
在测试中,我丢弃了 stderr 中的任何内容,因为它会扰乱测试用例的输出。我正在使用以下代码: freopen("/dev/null", "w", stderr); 使用-Wall -Werror
谁能用 warn_unqualified_access 和 warn_unused_result 的一个例子来解释一下 最佳答案 @warn_unused_result 假设您有一个表示一副纸牌的数组
我发现 __attribute__ ((warn_unused_result)) 作为一种鼓励开发人员不要忽略函数返回的错误代码的方法非常有用,但我需要它与 MSVC 以及gcc 和 gcc 兼容的编
如果用户不保存某个函数的返回值,我想警告用户,但如果函数返回一个具有非默认析构函数的类,它就不起作用。 假设以下代码: struct A {}; struct B { ~B() {} }; [[ gn
是否可以告诉 GCC 对所有函数使用 warn_unused_result 标志,即使没有相应的属性?因为如果我忘记检查返回值,我也可能忘记添加 GCC 特定属性。 我已经看到它可以与其他一些编译器一
我使用 Ideone.com 编译了下面的代码,弹出了以下警告。 rtctimer.c: In function 'rtctimer_next_tick': rtctimer.c:87.7: warn
考虑以下代码: struct MyType{}; MyType myFunction() __attribute__ ((warn_unused_result)) { return MyTyp
我很好奇,我在 PuTTy 上用 C 编程,有人知道我怎样才能摆脱这个警告吗? warning: ignoring return value of ‘realloc’, declared with a
#include int main() { int t; scanf("%d", &t); printf("%d", t); return 0; } 我使用 ideo
#include int main() { int t; scanf("%d", &t); printf("%d", t); return 0; } 我使用 ideo
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
const char *p; p="curl -d \'{\"switch\": \"00:00:3a:46:3b:8d:df:40\", \"name\":\"flow\", \"cookie\":
当我编译以下程序时:g++ -O2 -s -static 2.cpp它给了我警告 ignoring return value of ‘int scanf(const char*, ...)’, dec
我正在解决一个问题。问题是这样的:吉尔和荣格喜欢幸运数字。幸运数字显然是4和7,如果正数的十进制表示包含4和7,则该正整数被认为是幸运的。例如 444 、 474 和 7 是幸运的,而 4773 和
我有一个桥接到 Objective-C 的 Swift 类。即使使用 @discardableResult,它也会在 Objective-C 类的构建中抛出此警告: Ignoring return v
我是一名优秀的程序员,十分优秀!