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

 
 
18 страниц V  « < 10 11 12 13 14 > »   
Reply to this topicStart new topic
> Косяк у Кейла, Препроцессор не следит за скобками
ViKo
сообщение Oct 11 2015, 16:58
Сообщение #166


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(zltigo @ Oct 11 2015, 19:44) *
А что Вы скажете о таком использовании void:
(void)argument;

Скажу "замечательно!"
Код
#define GPIO_LOCK(PORT, BITS);            \
    GPIO##PORT->LCKR = 0x00010000 | BITS;    \
    GPIO##PORT->LCKR = 0x00000000 | BITS;    \
    GPIO##PORT->LCKR = 0x00010000 | BITS;    \
    (void)GPIO##PORT->LCKR;

Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 11 2015, 17:06
Сообщение #167


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (ViKo @ Oct 11 2015, 19:58) *
Скажу "замечательно!"

Могу в ответ сказать, что Вы не поняли к чему и вообще о чем был задан вопрос.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 11 2015, 17:09
Сообщение #168


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(zltigo @ Oct 11 2015, 20:06) *
Могу в ответ сказать, что Вы не поняли к чему и вообще о чем был задан вопрос.

Формально мой ответ соответствует вашему вопросу.
Конкретнее, "прочитать аргумент, но не использовать". Здесь главное прочитать.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 11 2015, 17:30
Сообщение #169


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (ViKo @ Oct 11 2015, 20:09) *
Формально мой ответ соответствует вашему вопросу.

Ну разве только формально, поскольку вырван из контекста.
QUOTE
Конкретнее, "прочитать аргумент, но не использовать". Здесь главное прочитать.

Для "прочитать" следует просто указать имя volatile переменной, коими являются (обязаны быть объявлены) и всякие железные регистры и никакого void в Вашем примере ни нафиг не нужно. Вот такие дела.
И вопрос был об аргументие переданном функции. Чего его читать-то? Вот он уже лежит, например, в регистре.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 11 2015, 17:45
Сообщение #170


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(zltigo @ Oct 11 2015, 20:30) *
Для "прочитать" следует просто указать имя volatile переменной, коими являются (обязаны быть объявлены) и всякие железные регистры и никакого void в Вашем примере ни нафиг не нужно. Вот такие дела.

Об аргументе функции - в этом участвовать не буду, не нахожу смысла.
О том, что написал. LCKR, естественно, volatile. И как же мне его обязательно прочитать? GPIOB->LCKR; и всё?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 11 2015, 17:53
Сообщение #171


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (ViKo @ Oct 11 2015, 20:45) *
Об аргументе функции - в этом участвовать не буду, не нахожу смысла.

Смысла в чем? В раборках с концептуальной "чиcтотой" использования void, или в самой конструкции? Сама конструкция ОЧЕНЬ полезна sm.gif - пользуюсь постоянно.
QUOTE
О том, что написал. LCKR, естественно, volatile. И как же мне его обязательно прочитать? GPIOB->LCKR; и всё?

И все sm.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 11 2015, 17:59
Сообщение #172


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(zltigo @ Oct 11 2015, 20:53) *
Смысла в чем? В раборках с концептуальной "чиcтотой" использования void, или в самой конструкции? Сама конструкция ОЧЕНЬ полезна sm.gif - полюзуюсь постоянно.

Да, в разборках... не вижу смысла.
А когда пользуетесь "конструкцией"? Указатели обезличиваете? rolleyes.gif
Цитата
И все sm.gif

Не пробовал. Проверю на досуге. Буду знать.
Я поначалу временную переменную заводил. Потом подсмотрел здесь на форуме (void), стал применять, довольный. А оно вона как, оказывается.
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 11 2015, 18:15
Сообщение #173


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ViKo @ Oct 11 2015, 20:59) *
Не пробовал. Проверю на досуге. Буду знать.

Приведение к void - это просто способ явно указать, что результат чтения переменной отбрасывается. Для улучшения читаемости кода и/или подавления возможных предупреждений компилятора.
Как-то даже натыкался на статейку, в которой авторы изучали разные языковые конструкции для чтения переменной и отбрасывания результата. Изучали с точки зрения совместимости с разными компиляторами. Надо сказать, протестированные компиляторы выступили хреново. Стандарт языка не оставляет сомнений (как мне кажется), что достаточно написать выражение, состоящее только из имени переменной. Далеко не все компиляторы были согласны. Но это было давно, может быть, с тех пор стало получше.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 11 2015, 18:17
Сообщение #174


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (ViKo @ Oct 11 2015, 20:59) *
А когда пользуетесь "конструкцией"? Указатели обезличиваете? rolleyes.gif

Расстроили Вы меня sad.gif.
Это игнорирование неиспользуемых аргументов.
QUOTE
А оно вона как, оказывается.

Ага sm.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 11 2015, 18:23
Сообщение #175


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Хорошо, а если бы LCKR не был volatile, какая разница? Задано "прочитать", пусть читает. При оптимизации такой оператор может быть выброшен, понятно. А без оптимизации, значит, прочитается?

Цитата(zltigo @ Oct 11 2015, 21:17) *
Это игнорирование неиспользуемых переменных.

Что это означает?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 11 2015, 18:28
Сообщение #176


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (scifi @ Oct 11 2015, 21:15) *
Далеко не все компиляторы были согласны.

Уточните, с чем это они "не согласны"? Просто имя НЕ volatile перемеменной, это ее чтение, что есть бессмысленная операция, предупреждение и выкидывание оптимизатором, если умеет. Два других помянутых варианта совершенно однозначны.




QUOTE (ViKo @ Oct 11 2015, 21:23) *
Что это означает?

Описка - аргументов.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 11 2015, 18:49
Сообщение #177


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



volatile говорит о том что каждый раз когда видим переменную, надо узнать ее значение из памяти, нельзя довольствоваться хранимым в регистре значением.

То что нельзя оптимизировать цикл while(temp) при том что temp объявлен volatile, это скорее следствие. То есть я хочу подчеркнуть что volatile - это не запрет на оптимизацию переменный, а указание использовать ее значение из памяти, и уточнять его каждый раз когда переменная нужна.

Однако из этого не следует что встретив в тексте
temp;
мы обязательно должны его прочитать, если a=temp; то да, должны прочитать значение из памяти и пихнуть его в а, просто потому что мы указали что temp должен всегда уточняться, но если он не используется, то и читать его не надо. Так что понять компиляторы и их авторов которые такие строчки пропускали в целом можно.

Я всегда делаю пустую переменную, причем присваиваю ее саму себе чтобы не было варнинга что она не использована, и читаю в нее явным образом, сопровождая вссе комменатрием. Так код гораздо понятнее, но это мое личное мнение.

Цитата
Это игнорирование неиспользуемых аргументов.

если это было не понятно, то
Цитата
Описка - аргументов.

прям стало супер понятно%)....

пример бы привели, а не 3 поста вокруг одного и того же...

Go to the top of the page
 
+Quote Post
Petka
сообщение Oct 11 2015, 19:15
Сообщение #178


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

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(zltigo @ Oct 11 2015, 19:44) *
Вам просто следовало-бы наконец понять, что "do-while-zero" является сама по себе ненужным трюком и еще в каких-то "эквивалентах" не нуждается.
...

Согласен, конструкция не нужна при одном или нескольких нижеследующих случаях.

1) Если в работе используется только один компилятор. (IAR к примеру)
2) Если в работе используется только одна архитектура. (ARM к примеру)
3) Если в работе участвует только один человек. (С высокой культурой программирования)
4) Если в работе не требуется следовать стандартам индустрии. (MISRA C к примеру)
5) Если в работе не требуется использовать макросы-как-функции. (Для целей отладки, например)
6) Если в работе используется компилятор с полностью отключенной оптимизацией, или настолько древний, что константы в условиях не обрабатываются на стадии компиляции.
7) Если в работе принято не признавать своих заблуждений.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 11 2015, 19:38
Сообщение #179


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Golikov A. @ Oct 11 2015, 21:49) *
Я всегда делаю пустую переменную, причем присваиваю ее саму себе чтобы не было варнинга что она не использована, и читаю в нее явным образом, сопровождая вссе комменатрием. Так код гораздо понятнее, но это мое личное мнение.

Такие теледвижения свидетельствуют только о незнании и неуверености sad.gif. Типа постучать в бубен, поставить свечку sad.gif
Причем они все бесполезны, ибо описаные действия БЕССМЫСЛЕННЫ и ВЫКИДЫВАЮТСЯ компилятором. Проделайте все эти бессмысленые телодвижения с НЕ volatile переменой и получите пшик sad.gif.
Вот и поучается, что необходимо и достаточно только упоминания имени volatile переменной.



QUOTE (Petka @ Oct 11 2015, 22:15) *
Согласен, конструкция не нужна при одном или нескольких нижеследующих случаях.

Все мимо.


QUOTE (GetSmart @ Oct 11 2015, 17:28) *
IAR на прототип с пустыми скобками не ругается. И правильно делает. Если считает их однозначно пустым списком.

Удивился. Проверил.
CODE
void dummy();
void dummy()
{
}


На
void dummy();
не ругается. Но, зато и за прототип его НЕ признает и на функцию
void dummy()
{
}
ругается:
Error[Pa045]: function "dummy" has no prototype

Вывод - косяк в IAR sad.gif, который вместо выругаться на КРИВОЙ прототип по месту его объявления, ругается на то, что отсутствует протоип по месту функции.

GCC тут поступает чуть более корректно, СРАЗУ говорит, что фигня это (в смысле вызов функции), а не прототип:
warning: function declaration isn't a prototype [-Wstrict-prototypes]

P.S.
Ну и раз уж добрался до компилятора, специально для Golikov A.
CODE
     46          void dummy( void )
     47          {
     48          int x = b;
     49          x = x;
     50          
     51          }
   \                     dummy:
   \   00000000   0xE12FFF1E         BX       LR            ;; return

Тот самый "пшик" оставшийся от всех ненужных телодвижений.
А вот без глупостей, но с volatile:
CODE
     47          void dummy( void )
     48          {
     49              b;
   \                     dummy:
   \   00000000   0x........         LDR      R0,??DataTable20
   \   00000004   0xE5900000         LDR      R0,[R0, #+0]
     50          }
   \   00000008   0xE12FFF1E         BX       LR            ;; return


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 11 2015, 21:34
Сообщение #180


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(zltigo @ Oct 11 2015, 21:28) *
Уточните, с чем это они "не согласны"?

Дык ради чего весь сыр-бор? Прочитать volatile-переменную. Вот просто не читали (если заглянуть в ассемблерный листинг).
Go to the top of the page
 
+Quote Post

18 страниц V  « < 10 11 12 13 14 > » 
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


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


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