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

 
 
 
Reply to this topicStart new topic
Igor26
сообщение Oct 25 2005, 12:11
Сообщение #1


Знающий
****

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



Уважаемые коллеги! Объясните пожалуйста, что не так. Компилирую файл:

unsigned char Buff[xx];

void F1(void)
{
-----------
Func(Buff);
-----------
}
Объявляю массив Buff[xx] в хидере File1.h следующим образом: extern unsigned char Buff[xx];
Компиляция этого файла проходит прекрасно.

Есть в проекте другой файл:

#include "File1.h"

void F2(void)
{
-------------
Func(Buff);
-------------
}
Так вот, при компиляции этого файла, выдается следующее:
Warning[Pe167]: argument of type "char *" is incompatible with parameter of type "unsigned char *"

Прототип функции Func: void Func(unsigned char *XXX) и она расположена в третьем файле. Хидер
с её прототипом подключен в обоих файлах.

Почему компилятор в этом случае стал считать, что входной параметр функции Funk типа CHAR, ведь
явно же указано, что UNSIGNED CHAR? smile3046.gif

Спасибо.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Oct 25 2005, 23:23
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата
Объявляю массив Buff[xx] в хидере File1.h следующим образом: extern unsigned char Buff[xx];
Компиляция этого файла проходит прекрасно.

Интересно, а вот у меня компилятор наоборот ругается на такое обяъявление массива. А вот так, все ОК: extern unsigned char Buff[];

З.Ы. Компилятор IAR EWAVR 4.11A


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
radist
сообщение Oct 26 2005, 05:39
Сообщение #3


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

Группа: Свой
Сообщений: 122
Регистрация: 24-05-05
Пользователь №: 5 329



Дело в том, что компилятор языка С по-разному работает с именами массивов и указателями при размещении массивов и указателей на них в разных файлах (ну так устроен компилятор, что подеаешь!). Поэтому, чтобы проблем избёжать лучше сделать так:
"
unsigned char Buff[xx];
unsigned char * ptrBuff=Buff;

void F1(void)
{
-----------
Func(ptrBuff);
-----------
}
"
Объявлять массив Buff[xx] в хидере File1.h следующим образом: extern unsigned char *ptrBuff;

Соответственно, второй файл:
"
#include "File1.h"

void F2(void)
{
-------------
Func(ptrBuff);
-------------
}
"
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Oct 26 2005, 06:13
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(radist @ Oct 26 2005, 08:39)
...unsigned char * ptrBuff=Buff;
...
*

Это же лишняя переменная в памяти.
Тогда уж лучше в хедере обьявить:
const unsigned char * ptrBuff=Buff;

Если поможет.
Go to the top of the page
 
+Quote Post
BVU
сообщение Oct 26 2005, 06:17
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Несомненно, что разные компиляторы имеют свои особенности (все зависит от производителя). Но если данный массив объявить для всего проекта, как глобальный - он должен работать однозначно в любом файле проекта (это уже стандарт языка 'C').


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
Rash
сообщение Oct 26 2005, 06:32
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Я сделал так в хидере

Mas.h
Код
extern unsigned char A[5];


в Mas.с файле
Код
unsigned char A[5] = {4, 1, 3, C, 0};

а потом в любом *.с файле вызываешь без проблем. IAR4.11a
Go to the top of the page
 
+Quote Post
Igor26
сообщение Oct 26 2005, 06:56
Сообщение #7


Знающий
****

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



Всем большое спасибо! Проблема решена. cheers.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 22:08
Рейтинг@Mail.ru


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