2012-01-24 3 views
2

Я слышал о многих прохладных расширениях GCC и встроенных функциях на протяжении многих лет, но я всегда забываю о них, прежде чем думать об их использовании.Прохладные встроенные модули GCC

Что такое классные расширения GCC и встроенные модули, а также некоторые реальные примеры того, как их использовать?

+4

Если вы хотите писать переносимый код, вы будете держаться подальше от (ССАГПЗ) расширений. – 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_... встроенных команд)
  • типа обобщенного программирование

Я написал некоторые из что и как использовать это с интерфейсами C11 в моем blog.

две особенности, которые не охвачены в функциональности по C11, которые действительно хороши, и что я очень хотел бы видеть в будущих версиях стандарта

  • выражений заявление (уже упомянутые Als)
  • __typeof__
+1

Человек, ваш блог правила! – slezica

2

Если вы хотите реальные примеры того, как полезно gcc extensions может быть затем GCC hacks in the Linux kernel интересный выбор, так как если он используется в Linux ядре, то это, вероятно, хорошо я Он оказывает определенное влияние на реальность. Как отмечалось ранее, использование расширений делает ваш код не переносным, но clang does make an effort to support gcc extensions, который может смягчить некоторые последствия.

Одно расширение, которое не распространяется, но используется в ядре Linux statement expressions, также см. Are compund statements (blocks) surrounded by parens expressions in ANSI C?.

В статье рассматривается следующие функции:

Смежные вопросы