Могут ли сущности в стандартной библиотеке C законно быть объявлены в C++?Право на пересылку объявляет объекты стандартной библиотеки C, но не объекты стандартной библиотеки C++?
Я просто задал этот же вопрос, но для C, и до сих пор ответ кажется да.
Forward declare entities in C standard library?
Я знаю, что объекты в ++ стандартной библиотеки C не может быть объявлен вперед по причинам, указанным в связанном вопросе выше. Прежде чем подумать об этом вопросе, я бы сказал, что стандартная библиотека C является частью стандартной библиотеки C++, и поэтому объекты в стандартной библиотеке C не могут быть объявлены в C++.
Теперь я не уверен. Было бы удивительно, если бы в стандарте C++ было что-то о стандартной библиотеке C, которую нет в стандарте C.
Мое понимание заключается в том, что на практике реализации C++ имеют реализацию C и одни и те же файлы заголовков и библиотеки используются для каждого (но, возможно, для ребрендинга как для C++). Таким образом, на практике декларации сущностей в стандартной библиотеке C, скорее всего, будут скомпилированы в C++. Тем не менее, мне интересно, что требует стандарт C++.
Имя коверкание очень хороший момент я не думал. Тем не менее, было бы странно, если бы первое прямое объявление, которое вы показываете, не было бы законным. – Praxeolitic
@Praxeolitic Ну, это не работает, поэтому вряд ли это будет законным ... –
Насколько я могу вспомнить только довольно неясный компилятор, CC на Solaris ?, диагностировано несоответствие между C и C++. Но это была чисто формальная вещь, ее можно было отключить. Практическая проблема заключается в том, когда вам нужна статическая функция-член класса как обратный вызов C, а для чисто формальной должна вводиться дополнительная функция '' extern '', которая вызывает функцию, которую вы хотите использовать. В свое время я не знал этого и просто счастливо использовал обычную статическую функцию-член. Теперь, когда я знаю, я думаю, что язык нуждается в исправлении в этом отношении ... –