Пределы идентификатора C - PullRequest
       6

Пределы идентификатора C

0 голосов
/ 15 декабря 2008

Как вызвать искаженный символ из C?

module.name:version

void* function(TypeSig); // Type of the function

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

1 Ответ

2 голосов
/ 15 декабря 2008

IIUC, вы определяете свой собственный язык и ищете подходящий алгоритм искажения имени.

Возможно, вы захотите использовать Intel et.al. Алгоритм искажения имени Itanium , который используется g ++ на всех платформах. В конкретном случае вы можете искажать каждое из своих имен, как если бы объявление C ++ было

namespace module{ namespace name { namespace Vversion /*e.g. V1_0 */ {
  void *function(int){}
}}}

который будет искажать как

_ZN6module4name4V1_08functionEi

Поскольку все ваши символы используют этот алгоритм, они не могут конфликтовать друг с другом. Они также не могут конфликтовать со стандартной функцией C под названием _ZN6module4name4V1_08functionEi, поскольку все имена, начинающиеся с _Z (или _UPPERCASE), зарезервированы для реализации (из C). Если вам нужна удобная возможность вызова из g ++, вы можете использовать это точное соглашение; иначе вы выбираете букву, отличную от Z.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...