extern "C" передает только соглашения о связывании, которые будут использоваться для кода внутри внешнего блока "C".Все в этом блоке будет связано, как если бы это было чисто c.Смущает то, что extern int совершенно другой.Это означает, что вы обещаете, что где-то есть фактический именованный индекс и фактическое именованное значение, но их здесь нет.В вашей реализации-A целые числа на самом деле не являются внешними во втором смысле - внешняя буква «С» подразумевает только то, что они обеспечивают строгое соглашение о связывании с.приводит к странным проблемам, как это.Смешивание их является законным (очевидно), но они не ведут себя так, как предполагает их название.
РЕДАКТИРОВАТЬ
См. Ответ Чарль для истинного определениявнешняя странность, как определено в стандарте C ++.