GCC如何为ROM中的函数停止误报警隐式函数声明?

问题描述 投票:2回答:4

我想摆脱我的代码库中的所有隐式函数声明警告。但是存在一个问题,因为一些功能在工厂被编程到微控制器ROM中,并且在链接期间链接器脚本仅提供功能地址。这些函数由SDK中的代码调用。

在编译期间,gcc当然会发出警告implicit-function-declaration。我怎么能摆脱这个警告?

要明确我理解为什么警告在那里,它是什么意思。但在这种特殊情况下,SDK的开发人员保证代码将使用隐式规则(即隐式函数只接受整数并返回一个int)。所以这个警告是误报。

这只是gnu-C-99,没有c ++。

思路:

  • 猜猜参数类型,在标题中写一个原型并包含它?
  • 告诉gcc用一些gcc属性来处理误报这些函数?
c gcc microcontroller
4个回答
2
投票

您可以在标头中创建原型函数,也可以使用以下内容抑制警告:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wimplicit-function-declaration"
/* line where GCC complains about implicit function declaration */
#pragma GCC diagnostic pop

0
投票

[完全由于赞扬而写]

您正在使用自己的代码编译供应商SDK。这通常不是您想要做的。

你要做的是用gcc -c -Wno-implicit-function-declaration和你自己的gcc -cgcc -o output all-your-c-files all-their-o-files文件构建他们的SDK文件。


0
投票

C不要求声明是原型,所以你可以通过使用非原型声明来解决问题(这应该是一个硬错误,而不是警告,因为隐式声明不是有效的C),这只需要知道返回类型。例如:

int foo();

由于“隐式声明”在历史上被视为返回int,因此您可以简单地将int用于所有这些。


0
投票

编写一个小程序,从链接器脚本生成头文件romfunctions.h,使用这样的行

int rom_function();

对于ROM定义的每个符号。从Makefile中运行此程序。更改使用这些函数的所有文件以包含romfunctions.h。这样,如果链接描述文件发生更改,则不必手动更新头文件。

© www.soinside.com 2019 - 2024. All rights reserved.