2012-01-24 79 views
2

我已经听说了很多很酷的GCC的扩展,多年来内置功能的,但我总是清盘使用它们的思维面前忘记了他们。酷GCC内建

什么是一些很酷的GCC扩展和内置插件,以及如何把他们使用了一些真实的例子?

+4

使用__builtin_prefetch

  • 预取。如果你想写可移植的代码,你将远离(GCC)扩展了。 – pmg

  • +0

    尽管扩展是坏的,但一些内建函数(与标准名称相同)非常有用,因为它们使操作看起来实际上可能很慢/效率低下。 –

    +1

    您也许会觉得这个问题很有用:http://stackoverflow.com/questions/3375697/useful-gcc-flags-for-c –

    回答

    3

    GCC提供了许多功能,如编译器扩展,关闭心灵的顶部和经常使用的我是:

    Statement Expressions
    Designated Initializers

    还有更多的记录了GCC网站here

    警告: 然而,使用任何形式的编译器扩展的渲染你的代码不可移植在其他的编译器所以不要在风险中使用它们。

    +2

    将指定的初始化器看作一个扩展是有点怪异的,它是自C99以来的标准的一部分..(我知道他们这样说) –

    +1

    指定的初始值设定项是C语言的一部分,不是扩展名。 –

    1

    我最近绊倒了不少人是真正有用的模仿新的C11标准。实际上,许多新功能已经存在,但语法不同。

    • 对齐属性
    • 线程局部变量
    • noreturn属性,以功能
    • 原子操作(通过其内建__sync_...
    • 型通用编程

    我已经写了一些以及如何在我的blog中使用C11接口。

    未在功能由C11覆盖是非常好的,而且我非常喜欢在标准

    • 语句表达式的未来版本(已被阿尔斯提及)看到

      两个特点

    • __typeof__
    +1

    男人,你的博客规则! – slezica

    2

    如果你想的多么有用gcc extensions可以再GCC hacks in the Linux kernel是一个有趣的选择,因为如果它是在Linux内核中使用现实生活中的例子那么它可能是一个很好的我ndication它有一些真实世界的影响。如前所述,使用扩展程序确实会使您的代码不可移植,但clang does make an effort to support gcc extensions可能会减轻一些影响。

    Linux内核中未涉及的一个扩展是statement expressions,同样参见Are compund statements (blocks) surrounded by parens expressions in ANSI C?

    本文涵盖了以下功能: