Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Первый раз после существенной переделки компилирую проект новым WinAVR (впервые из-под AVR Studio). Из 70 ошибок и 30 предупреждений осталось : 1/1. Но слижком уж матёрые. У меня варианты закончились :( Есть хоть какие-то идеи ?
Отправлено
Юрий_СВ (217.12.195.250) 12 сентября 2010, г. 21:17
Ошибка на включеный заголовочник :
error: stray '\321' in program
Ругается именно на enum
#if KBD_TYPE==KBD_6
enum _MODE {MS_MODE, СD_MODE, M_GND_MODE, SA_GND_MODE, MENU_MODE, MODE_AM, P_OFF_MODE, NO_CHANGE_MODE};
#endif
Может совпадает с чем-то из определений самого компилятора ?
--------------------------------------------------------------------
Предупреждение на первый аргумент при вызове функции:
warning: passing argument 1 of 'ShowTab' discards qualifiers from pointer target type
void ShowTab(int * tab, const char const ** name, unsigned char size, unsigned char mem_type, unsigned char sign)
Аргумент такой : (a16.dac.border_tab)
Определён так :
typedef struct
{
.......
int border_tab[DAC_RANGE_USED+1];
.......
} dac_t;
typedef struct
{
dac_t dac;
.......
} a16_t;
extern volatile a16_t a16;
Составить ответ | Вернуться на конференцию
Ответы
- Ответ: (+) - smoker77 (12.09.2010, 22:18:51 91.76.179.16, 179 байт)
- А почему "MODE_AM" ? Логичнее AM_MODE. - Тумблер (12.09.2010, 21:55:55 62.176.15.52, пустое)
- Ну, во втором случае просится принудительное привидение (int*). Массивы все же это не указатели. - VasilyS (12.09.2010, 21:22:51 80.92.96.25, пустое)
- Приведение помогает, но я не понимаю почему. (настораживает) Вроде как, имя массива без разименования (индексов) - это именно указатель, как и имя функции без круглых скобок. Раньше оно на это не жаловалось - Юрий_СВ (12.09.2010, 21:30:19 91.214.248.66, пустое)
- Нет, компилятор строго говоря различает указатели и массивы. Хотя бы потому, что может работает с ними по-разному. Для указателя он обязательно пользуется косвенной адресацией(потому что не знает базового адреса) типа LD r16, Z, а для массивов - относительной, т.к. знает "базу" Типа LDD r16, Z+24. У Богатырева что ли написано, типа Си в вопросах и ответах - VasilyS (12.09.2010, 21:37:45 80.92.96.25, пустое)
- Во, см. п2, конкретно 2.2 - VasilyS (12.09.2010, 21:46:43 80.92.96.25, пустое, ссылка)
- Вы не на тот пункт обратили внимание. См.п.2.3. - Юрий_СВ (12.09.2010, 22:32:35 91.214.248.66, пустое)
- Еще давно я обратил внимание на все пункты. А почему - 2.2 - там сказан ответ на вопрос "Но я слышал, что char a[] эквивалентно char *a" - "Ничего подобного". Читать рекомендую всё. - VasilyS (12.09.2010, 22:51:12 80.92.96.25, пустое)
- Не пункт 2.2. потому, что там речь про "массив и указатель", а мы говорим про "имя массива и указатель". - Юрий_СВ (13.09.2010, 02:18:24 91.214.248.66, пустое)
- Книга, мягко говоря не понравилась. У некоторых авторов читаешь и впечатляешься продуманости и глубине. В случае со Стивом Саммитом всё наоборот: тупо, надуманно, примитивно. Мне нравится книга: В.В. Подбельский С.С. Фомин "Программирование на языке Си" - Юрий_СВ (13.09.2010, 02:10:25 91.214.248.66, пустое, ссылка)
- Такое приведение надо очень сильно проверять. Там где тип переменной соответствует приведения избегать лучше. - mandigit (12.09.2010, 21:32:16 91.79.36.102, пустое)