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

 
 
 
Reply to this topicStart new topic
> вопрос по С, Не могу понять кусок программы
kostik2
сообщение May 2 2009, 09:46
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 16-02-06
Пользователь №: 14 375



void *memcpy(void *, CONST void *, size_t);

кусок из файла mmc.c // FatFs - FAT file system module R0.07 ©ChaN, 2009

FRESULT f_write (
FIL *fp, /* Pointer to the file object */
const void *buff, /* Pointer to the data to be written */
UINT btw, /* Number of bytes to write */
UINT *bw /* Pointer to number of bytes written */
)
{
FRESULT res;
DWORD clst, sect;
UINT wcnt, cc;
const BYTE *wbuff = buff;

вызываем MemCpy(&fp->fs->win[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */

.....
}

выходит ошибка : type error in argument 2 to `memcpy'; found `pointer to const unsigned char' expected `pointer to void'

я не очень силен в С подскажите что ни так ?
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение May 2 2009, 10:00
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317



Чем и как компилите, не Плюсовым компилятором случайно? Си не должен ругаться на такие приведения. Попробуйте например привести wbuf к (const void*)
Go to the top of the page
 
+Quote Post
kostik2
сообщение May 2 2009, 10:15
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 16-02-06
Пользователь №: 14 375



Цитата(Aesthete Animus @ May 2 2009, 14:00) *
Чем и как компилите, не Плюсовым компилятором случайно? Си не должен ругаться на такие приведения. Попробуйте например привести wbuf к (const void*)

компилятор iccavr 7.0 для микроконтроллеров avr.
выбрана опция: С++ comments, binary constants
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 2 2009, 10:22
Сообщение #4


Гуру
******

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



Цитата(Aesthete Animus @ May 2 2009, 13:00) *
Си не должен ругаться на такие приведения.
Вообще-то должен. Тут происходит неявное приведение параметра unsigned char const * к типу аргумента void *. При этом константность параметра теряется, на что и ругается компилятор.

Отредактировано: А проблема скорее всего в том, что прототип описан как void *memcpy(void *, CONST void *, size_t); и при этом CONST объявлен как #define CONST, а должно быть #define CONST const
Хотя совершенно не понятно, откуда вообще взялся тут этот CONST, хотя по стандарту должен быть const.


--------------------
На любой вопрос даю любой ответ
"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
kostik2
сообщение May 2 2009, 10:51
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 16-02-06
Пользователь №: 14 375



спасибо. исправил. ошибка больше не выводится.
Go to the top of the page
 
+Quote Post

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

 


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


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