#ifdef
в этом примере означает, что только компилятор C ++ увидит extern
, упаковывающий файл заголовка, что будет означать, что он будет генерировать не искаженные имена. Компилятор C не видит extern
(что он не понимает), но всегда выдает не искаженные имена.
Это означает, что компиляторы C и C ++ будут создавать одинаковые символы в своих объектных файлах, поэтому, какой бы компилятор не создавал объектный код для объявленных функций, все объектные файлы будут успешно связаны, поскольку символы имеют одинаковую связь и одинаковое имя.
Не должно быть никаких последствий для статического связывания или связывания с общей библиотекой.