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

 
 
> Наверное я плохо знаю С, Очень непонятная структура
kumle
сообщение Jun 29 2012, 06:13
Сообщение #1


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

Группа: Участник
Сообщений: 149
Регистрация: 15-12-09
Из: Москва
Пользователь №: 54 280



Есть такая структура:

Код

struct slt
{
  int count;
  void (*dnt) (unsigned char);
};


-----------------------------------------------------

Вот как она используется:

Код

#define SIZE 10
struct slt _slt[SIZE];

void f (unsigned char B)
{
  if(_slt[b].dnt) _slt[b].dnt((unsigned char)B);
}

Непонятно что вообще такое dnt ? и что происходит когда выполняется строка _slt[b].dnt((unsigned char)cool.gif ???

Сообщение отредактировал kumle - Jun 29 2012, 06:15
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Aug 8 2012, 09:39
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Чтоб не создавать почти пустую тему, задам вопрос здесь.

Объясните пожалуйста кусок из FatFS:

Код
DSTATUS disk_initialize(BYTE drv /* Physical drive nmuber (0..) */
)
{
    DSTATUS stat;
    int result;

    (void) result;
...


Что здесь обозначает последняя строка, на которую к тому же ИАР варнингует "Warning[Pe549]: variable "result" is used before its value is set" ?

Сообщение отредактировал GetSmart - Aug 8 2012, 09:41


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 8 2012, 09:47
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(GetSmart @ Aug 8 2012, 13:39) *
Что здесь обозначает последняя строка, на которую к тому же ИАР варнингует "Warning[Pe549]: variable "result" is used before its value is set" ?

Данная строка как бы призвана подавить другой ворнинг - о том, что переменная не используется. Ровным счетом ничего более не обозначает, должна быть выброшена оптимизатором.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 8 2012, 09:53
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aaarrr @ Aug 8 2012, 14:47) *
Данная строка как бы призвана подавить другой ворнинг - о том, что переменная не используется. Ровным счетом ничего более не обозначает, должна быть выброшена оптимизатором.

А что будет, если я везде, где эти варнинги и переменная "результ", я всё руками вырежу вместе с объявлением переменной?

И в догонку - зачем автор это поставил? В смысле переменную, которая не юзается. Даже (void)result вместо комментирования переменной, раз она не юзается. Такое ощущение, что автор хотел схитрить, но ИАР ему не дал sm.gif Вместо одного варнинга получился другой.

Сообщение отредактировал GetSmart - Aug 8 2012, 09:59


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
bus16
сообщение Aug 8 2012, 10:20
Сообщение #5


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

Группа: Свой
Сообщений: 78
Регистрация: 10-01-07
Пользователь №: 24 270



На первое - да ничего не будет, чёрной магии там нет. Хотя иногда IAR ругался на якобы неиспользуемые переменные, хотя они явно использовались в теле функции.
На второе - функция должна возвращать результат. Под это дело была создана переменная, но это функция инициализации и никакого результата она вернуть не может - только статус выполнения. Вероятно поэтому переменную всё-же оставил (захомячил) а варнинг о неиспользовании замаскировал другим, а его вероятно отключил в IAR-е.
Go to the top of the page
 
+Quote Post



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

 


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


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