为了摆脱静态代码分析警告 (QA-C),我需要为 __builtin_expect()
提供函数原型(prototype)。
我正在为 PowerPC 使用 WindRiver Diab 编译器。 在编译器手册中我找到了以下信息:
__builtin_expect(long exp, long c)
: ...exp
is also the return value.
所以,我的原型(prototype)如下:
long __builtin_expect(long exp, long c);
但是,它没有编译,我收到以下错误:
error (dcc:1701): invalid types on prototype to intrinsic __builtin_expect - when the intrinsic is enabled, optional user prototype must match
看来我的原型(prototype)不正确。 __builtin_expect
的正确原型(prototype)是什么?
错误消息指出用户原型(prototype)是可选的。所以应该可以定义它,对吧?
最佳答案
您需要以某种方式定义 __builtin_expect
以使您的静态分析器满意,因为它不知道该函数是什么。但是当您正常编译程序时,您需要使用 #ifdef
来禁用该定义,因为如果您尝试自己定义编译器内置函数,您的编译器将不喜欢它。内置函数随编译器一起提供,因此不应在您的程序中定义它们。
像这样的东西会起作用:
#ifdef _HEY_I_AM_RUNNING_STATIC_ANALYZER
#define __builtin_expect(e,c) (e)
#endif
我不知道你的静态分析器是如何工作的细节,所以我不知道在 #ifdef
中要测试的正确宏是什么。您可以阅读静态分析器的文档,了解它是否默认定义了任何预处理器符号,或者您是否可以告诉它在运行时定义哪些预处理器符号。
关于c - 什么是 __builtin_expect() 原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42281658/