2012-01-24 33 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?

    本文涵蓋了以下功能: