реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Варнинг компоновщика, Что это может означать?
Sergio66
сообщение Jan 24 2007, 11:59
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Цитата(shamray @ Jan 24 2007, 11:53) *
Был такой варнинг. Дело в том, что не должно быть объявления переменной как extern и одновременного объявления ее как локальной в одном файле. А у вас так и получается когда инклудится файл menu.h в menu.c - вначале переменнпая объявляется как extern , а потом как локальная.

В menu.h стоит охранник
#ifndef _MENU_H_
#define _MENU_H_
....
#endif
так, что повторное объявление отсутствует. Даже если бы это и было, то ругался бы компиллер - смотри выше.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 24 2007, 13:17
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



В данном случае сказать особо нечего, но общее впечатление от собственного понимания причин предупреждений и ошибок ИАРа удручает.
Не далее как вчера. Слово shift не является зарезервированным на C, не так ли? Поле bla_bla_bla.shift дает ошибку, bla_bla_bla.shiftt работает.
Может и тут какая-то фигня с грамматикой?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 24 2007, 13:31
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Dog Pawlowa @ Jan 24 2007, 12:17) *
В данном случае сказать особо нечего, но общее впечатление от собственного понимания причин предупреждений и ошибок ИАРа удручает.
Не далее как вчера. Слово shift не является зарезервированным на C, не так ли? Поле bla_bla_bla.shift дает ошибку, bla_bla_bla.shiftt работает.
Может и тут какая-то фигня с грамматикой?
Насчет грамматики не знаю, но я не вижу криминала в приведенном Sergio66 коде. Подозреваю, что проблема где-то в непоказанном окружении кода. Поэтому и предложил сделать минимальный проект, и на его основе либо искать где-то в другом месте, либо пытаться понять чего мы не понимаем. У меня были подобные предупреждения когда я пытался объявить в одном файле массив с явным указанием размера а в другом без указания (через []) или как extern указатель на тип элементов массива.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Sergio66
сообщение Jan 24 2007, 14:32
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Ну вот и решение!
Дело в том, что сама структура
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, все заработало.
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jan 24 2007, 17:58
Сообщение #20


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(Sergio66 @ Jan 23 2007, 17:31) *
Есть такое определение:
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 убирал - ничего не меняется.

Советую обратить внимание на последовательность включения заголовочных файлов, если их несколько.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jan 24 2007, 19:19
Сообщение #21


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(Sergio66 @ Jan 24 2007, 14:32) *
Ну вот и решение!
так вот, в файле menu.c def_items.h почему то не подключался. И компилятор не ругался на неизвестный тип item_struct_type.
Как только я подключил def_items.h непосредственно к menu.c, все заработало.

Фигня это какая-то, а не решение.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016