Hello,
I found the following code doesn't compile with gcc4.4. and -std=c99. Does this
behaviour conform to standard?
inline int foo(){
return 10;
}
int main(int argc, char **argv){
return foo();
}
I goolged the c99 inlining rule as follows. They does't seem to say such code
cannot be compiled.
C99 inline rules
The specification for "inline" is section 6.7.4 of the C99 standard (ISO/IEC
9899:1999). This isn't freely available, but you can buy a PDF of it from ISO
relatively cheaply.
*
A function where all the declarations (including the definition) mention
"inline" and never "extern". There must be a definition in the same translation
unit. No stand-alone object code is emitted. You can (must?) have a separate
(not inline) definition in another translation unit, and the compiler might
choose either that or the inline definition.
Such functions may not contain modifiable static variables, and may not
refer to static variables or functions elsewhere in the source file where they
are declared.
*
A function where at least one declaration mentions "inline", but where
some declaration doesn't mention "inline" or does mention "extern". There must
be a definition in the same translation unit. Stand-alone object code is
emitted (just like a normal function) and can be called from other translation
units in your program.
The same constraint about statics above applies here, too.
* A function defined "static inline". A local definition may be emitted if
required. You can have multiple definitions in your program, in different
translation units, and it will still work. This is the same as the GNU C rules.
Cheers,
Bingfeng Mei