Clang 的 inline

看,活了这么久,依然可以当小白。

Clang 的 inline 是怎么回事呢?

先来段代码:

 inline void f()
{
}

int main()
{
    f();
    return 0;
}

然后

$ clang main.c 
/tmp/main-hn0696.o: In function `main':
main.c:(.text+0x12): undefined reference to `f'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

WTF?这不科学!

好吧,我们来学习下clang 的inline 的behavior,换句话说,C99的。(http://clang.llvm.org/compatibility.html#inline

static inline:永远展开代码

inline:在编译器觉得应该展开的时候展开,例如在debug的时候,不展开。

所以你会发现

$ clang main.c -O2

是没问题的。因为此时 f() 被当作 inline 展开了所以并不需要解析 f 的符号。

结论:

写static inline,或者就不inline。或者让 clang 用 gnu89 的方言,但是这并不推荐。

Posted in Linux | 6 Comments

Why I hate redhat?

Continue reading

Posted in Linux | 3 Comments

使用拼音时的笔画输入

Posted in fcitx development | 30 Comments

照片 4

……无聊拍的。

Posted in 日志 | 1 Comment

KDE e.V. Supporting member

回家发现了个包裹真是惊喜呢……

Posted in KDE | Tagged | 11 Comments