Я видел код C/C++, используя extern «C», объявленный в сигнатурах функций, а также при включении заголовка C в файл CPP.разница между extern «C» и просто extern
, но некоторые функции просто объявляют extern перед своей подписью (без «C»).
QN1:
являются оба этих способа определения функции имеют тот же эффект, или же они подразумевают разные вещи?
извините, если я очень глуп, но я не могу найти эту разницу через Google.
Например:
extern int someFunction(void *ret_val);
extern "C" int someFunction(void *ret_val);
QN2:
если функция объявлена с экстерном в своей подписи, является необходимым для соответствующего файла заголовка, которые будут включены внутри экстерном «C» блок?
Как указал другой пользователь в комментариях, отмеченный дубликат не полностью удовлетворяет этому вопросу. Я редактирую так, что в будущем другие могут не вводить в заблуждение другой вопрос.
http://en.cppreference.com/w/cpp/language/language_linkage –
Кажется, что ни один из ответов в «дублирующем» вопросе (и почти никто не задает этот вопрос) описывают, что делает «extern» без «C» (или как он отличается от «extren» C »). Вот [docs] (http://en.cppreference.com/w/cpp/language/storage_duration), и вот stackoveflow [faq] (http://stackoverflow.com/questions/1358400/what-is-external- linkage-and-internal-linkage-in-c) об этом. Тогда есть еще одно использование с [templates] (http://en.cppreference.com/w/cpp/language/class_template). – user2079303
@ user2079303: если бы вы ответили на мой комментарий, я бы принял ваш ответ. Большое спасибо. –