В чем разница между следующими двумя объявлениями? Я думал, что они были эквивалентны, но первый образец работает, а второй нет. Я имею в виду, что он компилируется и запускается, но код отображения растрового изображения отображается пустым. Я еще не прошел через это, но я упускаю что-то очевидное? GUI_BITMAP - это простая структура, описывающая растровое изображение. Это для VC ++ 2005, но я думаю, что это не так и в VC ++ 2008. Почесывая голову на этом ...
Образец 1:
extern "C" const GUI_BITMAP bmkeyA_cap_active;
extern "C" const GUI_BITMAP bmkeyA_cap_inactive;
Образец 2:
extern "C"
{
const GUI_BITMAP bmkeyA_cap_active;
const GUI_BITMAP bmkeyA_cap_inactive;
};
Редактировать: Более подробное изучение показало, что второй пример создает структуры, в то время как первый относится к внешним структурам. Второй пример не должен связываться, поскольку в глобальной области видимости есть две переменные с одинаковыми именами. Но это не так, он отправляет заполненную нулями структуру в код дисплея, который сдается. Хммм .....
Редактировать 2: Выполнение того же кода через другой компилятор (IAR) фактически не удалось скомпилировать в примере 2 с ошибкой, связанной с отсутствием конструктора по умолчанию. Поэтому я предполагаю, что в ключевом слове "extern", структурах и C ++ есть что-то тонкое, чего я не понимаю. Если бы вещи во внешней области были функциями, два образца были бы идентичны, верно?