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.

We do no longer support Internet Explorer. To get the best experience of iar.com, we recommend upgrading to a modern browser such as Chrome or Edge.