У меня есть давняя библиотека C, используемая программами C и C ++.
В ней есть несколько модулей компиляции (другими словами, исходные файлы C ++), которые полностью C ++, но это никогда не было проблемой. Насколько я понимаю, что компоновщики (по крайней мере, Linux, Windows и т. Д. c.) Всегда работают на уровне файлов за файлом, так что объектный файл в библиотеке, на которую нет ссылки, не ' не влияет на линковку, не помещается в бинарный файл и так далее. Пользователи C библиотеки никогда не обращаются к символам C ++, а библиотека внутренне не обращается, поэтому полученное связанное приложение C -только. Так что, хотя он всегда работал идеально, я не знаю, потому что C ++ не прошел этот этап компоновки, или потому что более глубоко этот тип микширования всегда работал бы, даже если бы я сделал микс languages.
Впервые я думаю о добавлении некоторого кода C ++ в существующую реализацию API C.
В целях обсуждения, скажем, у меня есть функция C это что-то делает, и регистрирует это через stdout
, и, поскольку это буферизуется отдельно от cout
, вывод может стать запутанным. Итак, допустим, у этого модуля есть опция, которую можно установить для входа в систему cout
вместо stdout
. (Это более общий вопрос, а не только о том, чтобы заставить cout
и stdout
сотрудничать.) Код C ++ может работать или не выполняться, но зависимости обязательно будут.
Каким образом это повлияет на пользователей этой библиотеки? Он широко используется, поэтому я не могу проверить всю пользовательскую базу, и поскольку он используется для критически важных приложений, было бы недопустимо вносить изменения, которые приводят к сбою ссылок, по крайней мере, если я не предоставлю примечание к выпуску, объясняющее проблему и решение.
Как пример возможной проблемы, я знаю, что компиляторы имеют «скрытые» библиотеки вспомогательных функций, которые необходимы для программ C и C ++. Очевидно, есть также библиотеки Standard C и C ++, на которые обычно не нужно явно ссылаться. Я обеспокоен тем, что компилятор может не знать, что делать.