> Normally an inline must be locally defined ?
Makes sense.
NO! inline keyword is only a hint to the compiler that a function is supposed
small enough to be inlined. It's perfectly legal for a compiler to ignore this
hint if it thinks it's too complicated to inline this code.
C standard does not specify the minimal complexity to insure an inline function
is actually inlined.
>From function definition point of view, inlined keyword does not play a
>specific role for function visibility.
More precisely:
inline void f() { ... }
is like
void f() { .. }
and as an external visibility.
Even not commonly used a DEFINITION like
void f() { ... }
is in fact
extern void f() { ... }
Because extern is the default linkage either for a variable or a function.
(extern int i = 100; is not a declaration but a legal definition)
It means that if you include this definition form 2 translation units you will
have different results depending if inlined function has been inlined or not.
If you want to avoid problems when you define an inlined function in a .h is to
declare this function static. This way, if compiler is not able to inline
function, the two or more translation units using it will have their own static
copy that will make linker happy.
Christian
_______________________________________________
Tinycc-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/tinycc-devel