2012-01-24 14 views
2

私は何年もの間、素晴らしいGCCエクステンションと組み込み関数について多くのことを聞いてきましたが、私はそれらを使うことを考える前に常に忘れています。クールなGCCビルトイン

クールなGCCの拡張機能や組み込み関数、実際の使用例をいくつか紹介します。

+4

を使用して__builtin_prefetch

  • プリフェッチを使用してヒント。 – 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標準をエミュレートするのに本当に役立つ非常に多くのものを見つけました。実際には新機能の多くは既に存在しますが、構文は異なります。

    • アライメントが、私はのいくつかを書いた
    • スレッドローカル変数
    • 機能
    • アトミック操作(その__sync_...組み込みコマンドを介して)
    • タイプジェネリックプログラミング

    にnoreturn属性を属性それと私のblogのC11インターフェイスでそれを使用する方法。本当に素敵であること、そして、私は非常に(すでにアルスで述べた)標準

    • 文の表現の将来のバージョンで見たいというC11によって機能でカバーされていない

      2つの機能

    • __typeof__
    +1

    男、あなたのブログのルール! – slezica

    2

    あなたがGCC hacks in the Linux kernelがいかに便利なgcc extensionsの実際の例をしたい場合は、Linuxカーネルで使用されている場合、それはおそらく良い私ですので、面白い選択肢でありますそれには現実的な影響があります。前にも述べたように、拡張機能を使用すると、移植性が損なわれますが、影響を軽減できるclang does make an effort to support gcc extensionsがあります。

    Linuxカーネルでは扱われていないが、多く使われている拡張子は、statement expressionsです(Are compund statements (blocks) surrounded by parens expressions in ANSI C?も参照)。

    記事は、次の機能を説明します。

    関連する問題