Что GNU C расширения доступны, которые не тривиальны для реализации в C99?

Каким образом ядро Linux может скомпилировать только с GCC? Что GNU C расширения действительно необходимы для некоторых проектов и почему?

7
задан 2 revs, 2 users 100% 28 February 2014 в 19:46
поделиться

4 ответа

Думаю, это не они на самом деле то, что нужно. Просто есть много полезных, и переносимость кросс-компилятора - не такая уж большая проблема для ядра Linux, чтобы отказаться от тонкостей. Не говоря уже об огромном объеме работы, который потребуется, чтобы избавиться от расширений.

0
ответ дан 6 December 2019 в 23:03
поделиться

Вот пара расширений gcc, которые использует ядро ​​Linux:

  • встроенная сборка
  • встроенные функции gcc, такие как __builtin_expect, __ builtin_constant, __ builtin_return_address
  • , чтобы указать, например, какие регистры использовать (например,__attribute __ ((regparm (0)), __ attribute __ ((упаковано, выровнено (PAGE_SIZE)))))
  • конкретный код в зависимости от предопределенных макросов gcc (например, обходные пути для определенных ошибок gcc в определенных версиях)
  • диапазоны в случаях переключения (case 8 ... 15 :)

Вот еще несколько: http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/

Большая часть этих особенностей gcc сильно зависят от архитектуры или становятся возможными из-за того, как реализован gcc, и, вероятно, не имеют смысла указывать в стандарте C. Другие - просто удобные расширения C. Поскольку ядро ​​Linux построено на основе этих расширений, другие компиляторы должны предоставлять те же расширения, что и gcc, чтобы иметь возможность собирать ядро.

Дело не в том, что Linux должен был полагаться на эти функции gcc, например ядро NetBSD очень мало полагается на специфические вещи gcc.

8
ответ дан 6 December 2019 в 23:03
поделиться

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

И если GCC предлагает несколько полезных расширений, которые упрощают кодирование, или скомпилированное ядро ​​меньше или быстрее, использование этих расширений было естественным выбором.

2
ответ дан 6 December 2019 в 23:03
поделиться

GCC поддерживает вложенных функций , которые не являются частью стандарта C99. Тем не менее, требуется некоторый анализ, чтобы увидеть, насколько они распространены в ядре Linux.

1
ответ дан 6 December 2019 в 23:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: