展開 2

$ cat a.c
#include <stdio.h>
extern inline int f() {
    return 1;
}
int main(void) {
    puts(f() ? "opt" : "no opt");
}
$ cat b.c
int f() {
    return 0;
}
$ gcc a.c b.c && ./a.out
no opt
$ gcc -O3 a.c b.c && ./a.out
opt

inline + extern に関する GCC*1セマンティクスだそうな。

*1:inline は C99 で正式に導入されているけれど、上記はそこで規定されている振る舞いとは異なっているようです。GCC 4.3 からは C99 準拠の inline も利用できるみたい(が、そんな新しい版は持ってない)。