Functions should always be declared with the appropriate function prototype. Failure to specify function prototypes results in If a function being implicitly defined. Without a function prototypeprototype is not available, the compiler will assume the the correct cannot perform checks on the number and type of parameters have been supplied to a function. This can result in unintended and undefined behavior. C99 eliminated implicit function declarations from the C language \[[ISO/IEC 9899-1999:TC2|AA. C References#ISO/IEC 9899-1999TC2]\]. However, many compilers allow compilation of programs containing implicitly defined functions, although they may issue a warning message. These warnings should be resolved \[[MSC00-A|MSC00-A. Compile cleanly at high warning levels]\], but do not prevent program compilationarguments being passed to functions. Argument type checking in C is only performed during compilation, and does not occur during linking, or dynamic loading. Wiki Markup
Non-Compliant Code Example
...
Non-Compliant Code Example
Failure to specify function prototypes results in a function being implicitly defined. Without a function prototype, the compiler assumes the the correct number and type of parameters have been supplied to a function. This can result in unintended and undefined behavior.
In this non-compliant code example, the definition of func()
expects three parameters but is supplied only two. However, because there is no prototype for func()
, the compiler assumes that the correct number of arguments has been supplied, and uses the next value on the program stack as the missing third argument.
Code Block | ||
---|---|---|
| ||
func(1, 2); ... int func(int one, int two, int three){ printf("%d %d %d", one, two, three); return 1; } |
Wiki Markup |
---|
C99 eliminated implicit function declarations from the C language \[[ISO/IEC 9899-1999:TC2|AA. C References#ISO/IEC 9899-1999TC2]\]. However, many compilers allow compilation of programs containing implicitly defined functions, although they may issue a warning message. These warnings should be resolved \[[MSC00-A|MSC00-A. Compile cleanly at high warning levels]\], but do not prevent program compilation. |
Compliant Solution
To correct this example, the appropriate function prototype for func()
should be specified.
...