LINUX.ORG.RU

например, автомутекс который снимает лок при покидании зоны видимости. реализация автотестов. Т.е. дедаешь макрос, который объявляет функцию, и конструктор, который добавляет указатель на эту функцию в таблицу методов.

vromanov ★★
()
Ответ на: комментарий от vromanov

автомутекс
автотестов
авто

кто то не осилил спп

anonymous
()
Ответ на: комментарий от vromanov

__attribute__((constructor)) приводит к вызову функции при загрузке библиотеки, в которой она определена https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Function-Attributes.html

Лексических областей видимости этот атрибут не поддерживает.

anonymous
()
Ответ на: комментарий от anonymous

Для переменных есть атрибут - cleanup. Как раз для областей видимости

vromanov ★★
()

подскажите пару годных use cases когда используются эти расширения gcc для чистого си?

Я использую в shared object-ах, подменяющих символы из libc.so, чтобы инициализировать указатель на нужную функцию. И ты будешь поражен, но g++ использует этот механизм, чтобы обеспечить вызов конструкторов глобальных объектов внутри shared objects (насчет деструкторов не уверен).

почему то же они появились в gcc - знать бы зачем

Не только в gcc. clang и icc также поддерживают эту штуку, причем в точности с таким же синтаксисом.

kawaii_neko ★★★★
()

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

Sorcerer ★★★★★
()
Ответ на: комментарий от ananas
static void ctor(void) __attribute__ ((constructor));
static void ctor(void) { class_register(class_ptr); }

Похоже мануалы пацанам сложно даются.

rustonelove
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.