Есть ли список минимальных версий gcc, поддерживающих каждый __attribute__? - PullRequest
3 голосов
/ 24 февраля 2011

Официальная документация здесь перечисляет только минимальную требуемую версию для очень небольшого количества атрибутов:

http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html

Есть ли полный список, в какую версию был добавлен каждый атрибут?Еще лучше был бы список, который также показывает, какие из них совместимы с pcc и tcc.

Ответы [ 3 ]

4 голосов
/ 24 февраля 2011
1 голос
/ 24 февраля 2011

Для многих из них вы можете скопировать тесты gcc-версии из gmabros.h glib: http://git.gnome.org/browse/glib/tree/glib/gmacros.h

В зависимости от вашего проекта вы также можете просто использовать GLib, а затем использовать G_GNUC_NORETURN или что-то еще вместо __attribute__ напрямую.

Вероятно, в принципе было бы лучше сделать HAVE_GCC_ATTRIBUTE_NORETURN, как предполагает Джулиано, но в зависимости от вашего проекта это также может быть работа YAGNI.

0 голосов
/ 24 февраля 2011

Сделайте себе одолжение и не делайте этого.

Возможно, ваше программное обеспечение имеет некоторую фазу конфигурации / настройки перед компиляцией (например, команда autoconf ... тьфу! ( дрожь )) или что-то более вменяемое, например, CMake), используйте это.

Напишите небольшие тесты (макросы autoconf), которые проверяют, принимает ли компилятор интересующий вас __attribute__ и работает ли он должным образом.Если все прошло успешно, напишите макрос HAVE_GCC_ATTRIBUTE_XXX в файл config.h, который входит в ваш источник.

Затем используйте этот макрос с #ifdef, чтобы проверить, следует ли указывать атрибут в функции или нет,или, может быть, вам следует использовать другой хак для имитации отсутствия атрибута.

...