Does gcc completely conform to the inline model specified in C99 standard?
I've browsed some info about this problem. But I can't understand why the inline func must be specified with "extern" or "static".
In .c file, calling an inline function defined in the same translation unit causes an error. What's the reason of compiler behaviour?
I found a post Is “inline” without “static” or “extern” ever useful in C99?
What does this mean?
If a call to some function func with external linkage occurs where an inline definition is visible, the behavior is the same as if the call were made to another function, say __func, with internal linkage.
The inline semantic in C99 is a little bit confusing I have to admit. The inline
quantifier allows you to define alternative definitions of a function.
If a function is defined everywhere as just inline
in both declarations and definition then this definition is valid only in the local translation unit. In the C99 standard this definition is very vague, but in practice most compilers implement this in a similar sense to static inline
. Essentially just inline
overwrites any other function with the same name in any other linking unit. Thus if you declare a function as just inline
in a header the compiler will expect to find a definition of it in the same compilation unit and will give you an error later if it doesn't.
Now if a function is to be both inlineable and available in other translation units then it needs to be defined as extern
in the header declaration. Then the compiler won't look for it just in the current compilation unit.
static inline
is by far the most portable definition at the moment and is constrained to the current translation unit. This is often found in headers together with the actual function definition.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With