6.62.9 Символ-переименовывающие директивы
GCC поддерживает директиву #pragma , которая изменяет имя, используемое в ассемблере для данного объявления. Хотя эта директива поддерживается на всех платформах, она предназначена в первую очередь для обеспечения совместимости с заголовками системы Solaris. Этот эффект также можно достичь с помощью расширения меток ассемблера (см. Управление именами, используемыми в коде ассемблера).
-
redefine_extname oldname newname -
Данная директива присваивает C-функции oldname символ ассемблера newname. Макрос препроцессора
__PRAGMA_REDEFINE_EXTNAMEопределяется, если эта директива доступна (в настоящее время на всех платформах).
Эта директива и расширение меток asm взаимодействуют сложным образом. Вот некоторые особые случаи, о которых вам следует знать:
- Эта директива применяется только к объявлениям с внешней связью. Функция меток
asmтакого ограничения не имеет. - В C++, эта директива применяется только к объявлениям с "C" связью. Опять же, метки
asmтакого ограничения не имеют. - Если любой из способов изменения имени ассемблерного объявления применяется к объявлению, имя ассемблера которого уже определено (либо из-за предыдущего использования одного из этих способов, либо потому, что компилятор нуждался в имени ассемблера для генерации кода), а новое имя отличается, выводится предупреждение, и имя не изменяется.
- oldname, используемый
#pragma redefine_extname, всегда является именем языка C.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gcc/Symbol_002dRenaming-Pragmas.html