为了摆脱静态代码分析警告(QA-C),我需要为__builtin_expect()提供一个函数原型。
我正在为WindRiver Diab编译器使用PowerPC。在编译器手册中,我发现了以下信息:
__builtin_expect(long exp, long c):.exp也是返回值。
所以,我的原型如下:
long __builtin_expect(long exp, long c);但是,它没有编译,我得到了以下错误:
错误(dcc:1701):原型上的无效类型到内部__builtin_expect -当启用内禀时,可选的用户原型必须匹配
我的原型似乎不正确。__builtin_expect的正确原型是什么?
错误消息声明用户原型是可选的。所以应该可以给它下定义,对吧?
发布于 2017-02-16 18:35:50
您需要以某种方式定义__builtin_expect以使静态分析器高兴,因为它不知道该函数是什么。但是,在正常编译程序时,需要使用#ifdef来禁用该定义,因为如果您自己定义编译器,编译器将不喜欢它。内置程序随编译器一起提供,因此它们不应该在程序中定义。
像这样的东西会有用的:
#ifdef _HEY_I_AM_RUNNING_STATIC_ANALYZER
#define __builtin_expect(e,c) (e)
#endif我不知道静态分析器是如何工作的,所以我不知道在#ifdef中测试什么是正确的宏。您可以阅读静态分析器的文档,以确定它在默认情况下是否定义了任何预处理符号,或者在运行时是否可以告诉它要定义哪些预处理器符号。
发布于 2017-02-16 18:17:46
你应该仔细阅读GCC的其他建筑文档。
作为第一种近似,您可以将__builtin_expect替换为(调用_builtin_expect_replacement )下面的宏:
#define _builtin_expect_replacement(Exp,C) (Exp)对于大多数静态分析器来说,这应该足够了。
不要指望大多数GCC建筑都可以定义为功能。
https://stackoverflow.com/questions/42281658
复制相似问题