extern "C" блоке?
а что за extern "C" блок такой ?
в extern "C" можно завернуть хоть целую программу. пригождается когда у тебя в этом коде функции объявлены где-то беспорядочно, например когда ты сишный код включаешь в плюсовую программу, или берёшь изначально сишный код и немного используешь в нём плюсовые фичи, а линковать надо с другим сишным кодом
Но там нельзя писать код, только объявления и определения
А определения - это разве не код?
1. https://en.cppreference.com/w/cpp/language/language_linkage 2. https://en.cppreference.com/w/cpp/language/declarations
Для интеропа с Си или когда нужен стабильный ABI (например при линковке с другой библиотекой, или интеропе с другим языком посредством Си, ибо насколько знаю ABI в С++ не совсем стабильный и другой компилятор не гарантирует что он будет хотя бы даже мэнглить имена так же, не говоря уже о vtable'ах), а используя extern "C" правила именования используются из Си, т.е. без манглирования. Компилируется вроде бы в С++, что может привести к неожиданностям) Самый простой пример: берём пустую структуру, пихаем в другую структуру, в С++ sizeof будет 1, ибо стандарт. В Си же будет 0. Вот и вся проверка :)
extern C на это не влияет, он влияет только на имя функции или переменной
Обсуждают сегодня