Linker warnings for missing function declaration
Technical Note 95495
Architectures:
ARM, RH850, RX, SH, STM8, RL78
Component:
general
Updated:
11/6/2015 1:29 PM
Introduction
From a user : I had missed to declare some functions. So, by mistake, I had different parameters in the definition of the function and the call(s) to the same function. My application ended up with a difficult-to-find-run-time error.
The user asked:
Why didn't the IAR ILINK Linker warn me?
Background
- The problem/risk occur when implicit declarations (no declaration in the compiling unit) are used.
- Compared to the
UBROF
output format (used in some IAR Embedded Workbench products), this is a limitation with the ELF format that the compiler and linker are using. - IAR is aware of this limitation in ELF.
- There are no plans for the moment to create this kind of type check in IAR ILINK Linker.
Solution
Let the compiler find these problems, by enabling:
Project > Options > C/C++ Compiler > Language > C dialect > Require prototypes
On the compiler command line, the option to use is:
--require_prototypes
Then, create a header file with the declarations and use that wherever functions are defined or called.
All product names are trademarks or registered trademarks of their respective owners.