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

 
 
> Варнинг компоновщика, Что это может означать?
Sergio66
сообщение Jan 23 2007, 17:31
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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;
оно находится в 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
 
Start new topic
Ответов
boez
сообщение Jan 23 2007, 17:57
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 79
Регистрация: 1-11-06
Пользователь №: 21 868



Странно, всегда последнее время так делал и никто не ругался... По крайней мере на С. На С++ наверное такого делать нельзя - но я и не пробовал... А главное - непонятно почему линкер, а не компилятор.
Какой компилятор и линкер используются?
Go to the top of the page
 
+Quote Post
Sergio66
сообщение Jan 23 2007, 18:02
Сообщение #3


Местный
***

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



Цитата(boez @ Jan 23 2007, 17:57) *
Странно, всегда последнее время так делал и никто не ругался... По крайней мере на С. На С++ наверное такого делать нельзя - но я и не пробовал... А главное - непонятно почему линкер, а не компилятор.
Какой компилятор и линкер используются?

да компиллятору то и не на что ругаться. Именно компоновщик не может привести типы.
IAR 4.20A
Go to the top of the page
 
+Quote Post
boez
сообщение Jan 23 2007, 18:38
Сообщение #4


Частый гость
**

Группа: Новичок
Сообщений: 79
Регистрация: 1-11-06
Пользователь №: 21 868



Цитата(Sergio66 @ Jan 23 2007, 17:02) *
да компиллятору то и не на что ругаться. Именно компоновщик не может привести типы.
IAR 4.20A

С каких пор компоновщики стали понимать типы? ИМХО для каждого объекта он должен знать секцию, адрес, размер и выравнивание... Ну может еще что-то, но типы? Или я отстал от жизни?
В конце концов попробуйте то же самое собрать gcc.

Цитата(prottoss @ Jan 23 2007, 17:23) *
Цитата(Sergio66 @ Jan 23 2007, 21:31) *
Есть такое определение:

далее идут определения переменных в файле menu.c (!!!)

item_struct_type Main_menu[NUMBER] = {инициализация};

есть файл menu.h со следующими строками:
extern item_struct_type Main_menu[NUMBER] ;

А зачем extern item_struct_type *current_menu;???
зачем определять указатель, если каждому юниту извесно про extern item_struct_type Main_menu[NUMBER] ;???
Каждый юнит когда угодно может взять и создать указатель на массив... не из-за этого ли варнинги?

К тому же подозрительно выглядит присвоение в хедере...


Читайте внимательнее - в хидере только typedef и extern декларация. Настоящая декларация и инициализация в .c файле. Повторяю, у меня на gcc такое прокатывает на ура.
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 24 2007, 09:33
Сообщение #5


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(boez @ Jan 23 2007, 21:38) *
Цитата(Sergio66 @ Jan 23 2007, 17:02) *

да компиллятору то и не на что ругаться. Именно компоновщик не может привести типы.
IAR 4.20A

С каких пор компоновщики стали понимать типы?

Со времен С++.


Цитата(Sergio66 @ Jan 23 2007, 20: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;

Попробуйте такой вариант:

Код
struct item_struct_type
{
       unsigned int *var_pointer;
       unsigned char position;
       unsigned char flags;
       char left;
       char right;
       char up;
       char down;
       void (*relative_func)();                      
};

Хотя судя по тексту диагностики, дело не в этом.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Sergio66   Варнинг компоновщика   Jan 23 2007, 17:31
|- - Sergio66   Цитата(boez @ Jan 23 2007, 18:38) Цитата(...   Jan 23 2007, 18:41
||- - boez   Цитата(Sergio66 @ Jan 23 2007, 17:41) Вот...   Jan 23 2007, 18:58
|- - prottoss   Цитата(boez @ Jan 23 2007, 22:38) Читайте...   Jan 23 2007, 18:44
- - IgorKossak   Не забыли охранник поставить в файле menu.h? Код#i...   Jan 23 2007, 18:03
|- - Sergio66   Цитата(IgorKossak @ Jan 23 2007, 18:03) Н...   Jan 23 2007, 18:14
- - prottoss   Цитата(Sergio66 @ Jan 23 2007, 21:31) Ест...   Jan 23 2007, 18:23
|- - Sergio66   Цитата(prottoss @ Jan 23 2007, 18:23) Цит...   Jan 23 2007, 18:32
- - SpiritDance   Есть мыстль что в модуль mulidisplay и в модуль mu...   Jan 23 2007, 18:25
- - Сергей Борщ   Цитата(Sergio66 @ Jan 23 2007, 16:31) Ест...   Jan 24 2007, 10:50
- - shamray   Был такой варнинг. Дело в том, что не должно быть ...   Jan 24 2007, 11:53
|- - Sergio66   Цитата(shamray @ Jan 24 2007, 11:53) Был ...   Jan 24 2007, 11:59
|- - Dog Pawlowa   В данном случае сказать особо нечего, но общее впе...   Jan 24 2007, 13:17
|- - Сергей Борщ   Цитата(Dog Pawlowa @ Jan 24 2007, 12:17) ...   Jan 24 2007, 13:31
- - Sergio66   Ну вот и решение! Дело в том, что сама структу...   Jan 24 2007, 14:32
|- - SpiritDance   Цитата(Sergio66 @ Jan 24 2007, 14:32) Ну ...   Jan 24 2007, 19:19
- - _Bill   Цитата(Sergio66 @ Jan 23 2007, 17:31) Ест...   Jan 24 2007, 17:58


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

 


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


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