Sergio66 0 24 января, 2007 Опубликовано 24 января, 2007 · Жалоба Был такой варнинг. Дело в том, что не должно быть объявления переменной как extern и одновременного объявления ее как локальной в одном файле. А у вас так и получается когда инклудится файл menu.h в menu.c - вначале переменнпая объявляется как extern , а потом как локальная. В menu.h стоит охранник #ifndef _MENU_H_ #define _MENU_H_ .... #endif так, что повторное объявление отсутствует. Даже если бы это и было, то ругался бы компиллер - смотри выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 24 января, 2007 Опубликовано 24 января, 2007 · Жалоба В данном случае сказать особо нечего, но общее впечатление от собственного понимания причин предупреждений и ошибок ИАРа удручает. Не далее как вчера. Слово shift не является зарезервированным на C, не так ли? Поле bla_bla_bla.shift дает ошибку, bla_bla_bla.shiftt работает. Может и тут какая-то фигня с грамматикой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 136 24 января, 2007 Опубликовано 24 января, 2007 · Жалоба В данном случае сказать особо нечего, но общее впечатление от собственного понимания причин предупреждений и ошибок ИАРа удручает. Не далее как вчера. Слово shift не является зарезервированным на C, не так ли? Поле bla_bla_bla.shift дает ошибку, bla_bla_bla.shiftt работает. Может и тут какая-то фигня с грамматикой? Насчет грамматики не знаю, но я не вижу криминала в приведенном Sergio66 коде. Подозреваю, что проблема где-то в непоказанном окружении кода. Поэтому и предложил сделать минимальный проект, и на его основе либо искать где-то в другом месте, либо пытаться понять чего мы не понимаем. У меня были подобные предупреждения когда я пытался объявить в одном файле массив с явным указанием размера а в другом без указания (через []) или как extern указатель на тип элементов массива. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergio66 0 24 января, 2007 Опубликовано 24 января, 2007 · Жалоба Ну вот и решение! Дело в том, что сама структура typedef __flash struct { unsigned int *var_pointer; unsigned char position; unsigned char flags; char left; char right; char up; char down; void (*relative_func)(); } item_struct_type; описана в файле def_items.h который подключен к stdafx.h а stdafx.h, в свою очередь подключается к menu.c и menu.h так вот, в файле menu.c def_items.h почему то не подключался. И компилятор не ругался на неизвестный тип item_struct_type. Как только я подключил def_items.h непосредственно к menu.c, все заработало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bill 0 24 января, 2007 Опубликовано 24 января, 2007 · Жалоба Есть такое определение: typedef __flash struct { unsigned int *var_pointer; unsigned char position; unsigned char flags; char left; char right; char up; char down; void (*relative_func)(); } item_struct_type; оно находится в h файле далее идут определения переменных в файле menu.c item_struct_type Main_menu[NUMBER] = {инициализация}; и item_struct_type *current_menu = Main_menu; есть файл menu.h со следующими строками: extern item_struct_type Main_menu[NUMBER] ; и extern item_struct_type *current_menu; файл menu.h подключается к нескольким файлдам проекта все прекрасно компиллируется, при компоновке выдаются 2 варнинга: Warning[w6]: Type conflict for external/entry "Main_menu", in module Multidisplay against external/entry in module Menu; array types have different element types; different composite type kinds и Warning[w6]: Type conflict for external/entry "current_menu", in module LCD against external/entry in module Menu; different composite type kinds соответственно если я из этих файлов убираю все, включая #include menu.h, то такие же варнинги переходят на другие файлы, где подключается menu.h В чем может быть дело. Модификатор __flash из typedef убирал - ничего не меняется. Советую обратить внимание на последовательность включения заголовочных файлов, если их несколько. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpiritDance 0 24 января, 2007 Опубликовано 24 января, 2007 · Жалоба Ну вот и решение! так вот, в файле menu.c def_items.h почему то не подключался. И компилятор не ругался на неизвестный тип item_struct_type. Как только я подключил def_items.h непосредственно к menu.c, все заработало. Фигня это какая-то, а не решение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться