2014-12-31 5 views
0

Могут ли сущности в стандартной библиотеке 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++.

ответ

3

Проблема заключается в том, что C++ и C не совместимы на уровне объекта ... Например, он по-другому написать:

double atof(const char *); 

и

extern "C" { 
    double atof(const char *); 
} 
+0

Имя коверкание очень хороший момент я не думал. Тем не менее, было бы странно, если бы первое прямое объявление, которое вы показываете, не было бы законным. – Praxeolitic

+0

@Praxeolitic Ну, это не работает, поэтому вряд ли это будет законным ... –

+0

Насколько я могу вспомнить только довольно неясный компилятор, CC на Solaris ?, диагностировано несоответствие между C и C++. Но это была чисто формальная вещь, ее можно было отключить. Практическая проблема заключается в том, когда вам нужна статическая функция-член класса как обратный вызов C, а для чисто формальной должна вводиться дополнительная функция '' extern '', которая вызывает функцию, которую вы хотите использовать. В свое время я не знал этого и просто счастливо использовал обычную статическую функцию-член. Теперь, когда я знаю, я думаю, что язык нуждается в исправлении в этом отношении ... –

Смежные вопросы