|
|
  |
Косяк у Кейла, Препроцессор не следит за скобками |
|
|
|
Oct 11 2015, 17:30
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 11 2015, 17:53
|

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

|
QUOTE (ViKo @ Oct 11 2015, 20:45)  Об аргументе функции - в этом участвовать не буду, не нахожу смысла. Смысла в чем? В раборках с концептуальной "чиcтотой" использования void, или в самой конструкции? Сама конструкция ОЧЕНЬ полезна  - пользуюсь постоянно. QUOTE О том, что написал. LCKR, естественно, volatile. И как же мне его обязательно прочитать? GPIOB->LCKR; и всё? И все
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 11 2015, 17:59
|

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

|
Цитата(zltigo @ Oct 11 2015, 20:53)  Смысла в чем? В раборках с концептуальной "чиcтотой" использования void, или в самой конструкции? Сама конструкция ОЧЕНЬ полезна  - полюзуюсь постоянно. Да, в разборках... не вижу смысла. А когда пользуетесь "конструкцией"? Указатели обезличиваете? Цитата И все  Не пробовал. Проверю на досуге. Буду знать. Я поначалу временную переменную заводил. Потом подсмотрел здесь на форуме (void), стал применять, довольный. А оно вона как, оказывается.
|
|
|
|
|
Oct 11 2015, 18:17
|

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

|
QUOTE (ViKo @ Oct 11 2015, 20:59)  А когда пользуетесь "конструкцией"? Указатели обезличиваете?  Расстроили Вы меня  . Это игнорирование неиспользуемых аргументов. QUOTE А оно вона как, оказывается. Ага  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 11 2015, 18:28
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 11 2015, 18:49
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
volatile говорит о том что каждый раз когда видим переменную, надо узнать ее значение из памяти, нельзя довольствоваться хранимым в регистре значением. То что нельзя оптимизировать цикл while(temp) при том что temp объявлен volatile, это скорее следствие. То есть я хочу подчеркнуть что volatile - это не запрет на оптимизацию переменный, а указание использовать ее значение из памяти, и уточнять его каждый раз когда переменная нужна. Однако из этого не следует что встретив в тексте temp; мы обязательно должны его прочитать, если a=temp; то да, должны прочитать значение из памяти и пихнуть его в а, просто потому что мы указали что temp должен всегда уточняться, но если он не используется, то и читать его не надо. Так что понять компиляторы и их авторов которые такие строчки пропускали в целом можно. Я всегда делаю пустую переменную, причем присваиваю ее саму себе чтобы не было варнинга что она не использована, и читаю в нее явным образом, сопровождая вссе комменатрием. Так код гораздо понятнее, но это мое личное мнение. Цитата Это игнорирование неиспользуемых аргументов. если это было не понятно, то Цитата Описка - аргументов. прям стало супер понятно%).... пример бы привели, а не 3 поста вокруг одного и того же...
|
|
|
|
|
Oct 11 2015, 19:15
|
Профессионал
    
Группа: Свой
Сообщений: 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) Если в работе принято не признавать своих заблуждений.
|
|
|
|
|
Oct 11 2015, 19:38
|

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

|
QUOTE (Golikov A. @ Oct 11 2015, 21:49)  Я всегда делаю пустую переменную, причем присваиваю ее саму себе чтобы не было варнинга что она не использована, и читаю в нее явным образом, сопровождая вссе комменатрием. Так код гораздо понятнее, но это мое личное мнение. Такие теледвижения свидетельствуют только о незнании и неуверености  . Типа постучать в бубен, поставить свечку  Причем они все бесполезны, ибо описаные действия БЕССМЫСЛЕННЫ и ВЫКИДЫВАЮТСЯ компилятором. Проделайте все эти бессмысленые телодвижения с НЕ volatile переменой и получите пшик  . Вот и поучается, что необходимо и достаточно только упоминания имени 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  , который вместо выругаться на КРИВОЙ прототип по месту его объявления, ругается на то, что отсутствует протоип по месту функции. 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
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|