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

 
 
> Косяк у Кейла, Препроцессор не следит за скобками
ViKo
сообщение Aug 28 2015, 11:21
Сообщение #1


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

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



Делаю функцию программной задержки. (Длинная не нужна, естественно, но вопрос уже академический, захотел дойти до предела.) Каждый цикл выполняется за 4 такта, отсюда и деление на 4000. Нюансы не интересны, не в этом дело.

Код
#define SYSCLK        48000000ULL
#define _NS    1
#define _US    1000
#define _MS    1000000
#define _SS    1000000000

#define DELAY(VALUE, UNIT);    \
  /* DelayFourCycles(VALUE * UNIT * (SYSCLK / 1000000) / 4000); */ \
  DelayFourCycles((SYSCLK / 1000000) * VALUE * UNIT / 4000);

  DELAY(50, _SS);


Так вот, когда сделал, как в закомментированной строке, Кейл ругается на то, что число не влазит в int. И загружает в функцию абы что. Если же сделать, как в строке без комментария, то все вычисляется правильно. Выходит, Кейл видит что последовательность операций равнозначна, что со скобками, что без, и лихо их отбрасывает. Возникает переполнение. Хотя не понятно, отчего возникает, 64 битов должно хватать (на компьютерном калькуляторе хватает). Как будто у Кейла не 64-битовое вычисление, а меньшее.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Aug 28 2015, 15:18
Сообщение #2


Гуру
******

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



Бессмысленной можно было бы признать запись while(0) {...} - тут warning был бы вполне уместен, но в случае do {...} while(0) одна итерация будет выполнена, так что смысл остается (пусть только для помянутой обертки от макроса).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ViKo   Косяк у Кейла   Aug 28 2015, 11:21
- - aaarrr   В макросе не хватает скобок для VALUE и UNIT.   Aug 28 2015, 11:44
- - den_po   Цитата(ViKo @ Aug 28 2015, 16:21) Как буд...   Aug 28 2015, 11:51
- - ViKo   Заменил #define _NS 1ULL #define _US 1000ULL #defi...   Aug 28 2015, 12:00
|- - aaarrr   Цитата(ViKo @ Aug 28 2015, 15:00) "Н...   Aug 28 2015, 12:08
|- - ViKo   Цитата(aaarrr @ Aug 28 2015, 15:08) Прост...   Aug 28 2015, 12:13
- - Kabdim   Кмк объяснение другое. VALUE * UNIT * (SYSCLK / 10...   Aug 28 2015, 12:01
|- - ViKo   Цитата(Kabdim @ Aug 28 2015, 15:01) Кмк о...   Aug 28 2015, 12:04
- - Kabdim   Если говорить про стиль макрописания. То как тольк...   Aug 28 2015, 12:12
|- - zltigo   QUOTE (Kabdim @ Aug 28 2015, 15:12) Если ...   Aug 28 2015, 14:46
|- - aaarrr   Цитата(zltigo @ Aug 28 2015, 17:46) Да и ...   Aug 28 2015, 14:57
||- - zltigo   QUOTE (aaarrr @ Aug 28 2015, 17:57) В чем...   Aug 28 2015, 15:02
||- - scifi   Цитата(zltigo @ Aug 28 2015, 18:02) В бес...   Aug 28 2015, 15:13
|- - Petka   Цитата(zltigo @ Aug 28 2015, 17:46) .... ...   Aug 28 2015, 18:51
|- - zltigo   QUOTE (Petka @ Aug 28 2015, 21:51) Так чт...   Aug 28 2015, 18:55
|- - Petka   Цитата(zltigo @ Aug 28 2015, 21:55) Это п...   Aug 28 2015, 19:13
- - Mihey_K   ЦитатаСначала любые операнды типа CHAR или SHORT п...   Aug 28 2015, 13:47
- - Golikov A.   ЦитатаСначала любые операнды типа CHAR или SHORT п...   Aug 28 2015, 14:26
- - Kabdim   Огласите пожалуйста решение лучше. Думаю многим бы...   Aug 28 2015, 15:16
|- - zltigo   QUOTE (Kabdim @ Aug 28 2015, 18:16) Оглас...   Aug 28 2015, 16:17
|- - aaarrr   Цитата(zltigo @ Aug 28 2015, 19:17) Бессм...   Aug 28 2015, 17:31
||- - zltigo   QUOTE (aaarrr @ Aug 28 2015, 20:31) Тогда...   Aug 28 2015, 18:05
||- - aaarrr   Цитата(zltigo @ Aug 28 2015, 21:03) Это е...   Aug 28 2015, 18:06
|||- - zltigo   QUOTE (aaarrr @ Aug 28 2015, 21:06) Да ну...   Aug 28 2015, 18:12
|||- - aaarrr   Цитата(zltigo @ Aug 28 2015, 21:12) Да, э...   Aug 28 2015, 18:41
||||- - zltigo   QUOTE (aaarrr @ Aug 28 2015, 21:41) Но по...   Aug 28 2015, 18:50
||||- - scifi   Цитата(zltigo @ Aug 28 2015, 21:50) Ну ин...   Aug 28 2015, 18:58
|||||- - zltigo   QUOTE (scifi @ Aug 28 2015, 21:58) Я вас ...   Aug 28 2015, 19:22
|||||- - Petka   Цитата(zltigo @ Aug 28 2015, 22:22) Не см...   Aug 28 2015, 19:37
||||||- - zltigo   QUOTE (Petka @ Aug 28 2015, 22:37) в конс...   Aug 28 2015, 21:43
||||||- - Petka   Цитата(zltigo @ Aug 29 2015, 00:43) Вы, о...   Aug 28 2015, 22:09
||||||- - zltigo   QUOTE (Petka @ Aug 29 2015, 01:09) Откуда...   Aug 28 2015, 23:39
|||||- - scifi   Цитата(zltigo @ Aug 28 2015, 22:22) Увы, ...   Aug 28 2015, 21:14
|||||- - zltigo   QUOTE (scifi @ Aug 29 2015, 00:14) Пардон...   Aug 28 2015, 21:32
|||||- - scifi   Цитата(zltigo @ Aug 29 2015, 00:32) От то...   Aug 28 2015, 21:40
||||- - aaarrr   Цитата(zltigo @ Aug 28 2015, 21:50) ...ко...   Aug 28 2015, 18:59
|||- - GetSmart   Цитата(zltigo @ Aug 28 2015, 22:12) Но ко...   Aug 29 2015, 09:37
||- - gerber   Цитата(zltigo @ Aug 28 2015, 22:05) for(;...   Aug 30 2015, 09:34
||- - zltigo   QUOTE (gerber @ Aug 30 2015, 12:34) В опе...   Aug 30 2015, 10:01
|- - Kabdim   Цитата(zltigo @ Aug 28 2015, 20:17) Давай...   Aug 28 2015, 18:27
|- - zltigo   QUOTE (Kabdim @ Aug 28 2015, 21:20) Не мо...   Aug 28 2015, 18:36
|- - Kabdim   Демагогия в техническом споре... свежо! И легк...   Aug 28 2015, 18:55
- - Mihey_K   Сам по себе цикл с единичной итерацией да, бесмысл...   Aug 28 2015, 15:21
- - Golikov A.   вообще то, насколько я помню трюк do while(0) созд...   Aug 28 2015, 17:22
|- - zltigo   QUOTE (Golikov A. @ Aug 28 2015, 20:22) в...   Aug 29 2015, 09:53
- - scifi   Цитата(ViKo @ Aug 28 2015, 20:09) Думал, ...   Aug 28 2015, 17:39
|- - aaarrr   Цитата(scifi @ Aug 28 2015, 20:39) Да это...   Aug 28 2015, 17:51
|- - zltigo   QUOTE (scifi @ Aug 28 2015, 20:39) Да это...   Aug 28 2015, 18:09
- - ViKo   напишите for ( ; true; ), если пустота не нравится...   Aug 28 2015, 17:57
- - Golikov A.   ЦитатаСначала любые операнды типа CHAR или SHORT п...   Aug 28 2015, 18:01
|- - aaarrr   Цитата(Golikov A. @ Aug 28 2015, 21:01) я...   Aug 28 2015, 19:13
- - Golikov A.   вот я знаю пример явно ошибочного выражения Кодin...   Aug 28 2015, 18:11
- - Golikov A.   вот while(0) уже не интересно, а тезис что при выч...   Aug 28 2015, 18:46
- - Golikov A.   Цитатау K&R совершенно аналогично. Это вообще ...   Aug 29 2015, 03:34
|- - zltigo   QUOTE (Golikov A. @ Aug 29 2015, 06:34) Н...   Aug 29 2015, 06:04
- - ViKo   Что вы сцепились на пустом. Я вот ни разу не испол...   Aug 29 2015, 04:30
- - Golikov A.   ща и вам достанется.... как вы могли ни разу не ис...   Aug 29 2015, 04:52
|- - ViKo   Цитата(Golikov A. @ Aug 29 2015, 07:52) щ...   Aug 29 2015, 05:00
- - Golikov A.   ЦитатаУже писал - в стандарте нет запрета на испол...   Aug 29 2015, 06:22
|- - ViKo   Цитата(Golikov A. @ Aug 29 2015, 09:22) а...   Aug 29 2015, 07:10
|- - Сергей Борщ   Цитата(ViKo @ Aug 29 2015, 10:10) Восклиц...   Aug 29 2015, 14:55
|- - zltigo   QUOTE (Сергей Борщ @ Aug 29 2015, 17:55) ...   Aug 29 2015, 14:59
|- - ViKo   Цитата(Сергей Борщ @ Aug 29 2015, 17:55) ...   Aug 29 2015, 17:37
- - GetSmart   Цитата(zltigo @ Aug 29 2015, 13:53) Ошибк...   Aug 29 2015, 09:58
|- - zltigo   QUOTE (GetSmart @ Aug 29 2015, 12:58) Кон...   Aug 29 2015, 10:14
- - GetSmart   А разве while(1) не сам всевышний написал? Цитат...   Aug 29 2015, 10:22
|- - zltigo   QUOTE (GetSmart @ Aug 29 2015, 13:22) А р...   Aug 29 2015, 10:32
- - GetSmart   У цикла while только один аргумент - предусловие в...   Aug 29 2015, 10:43
|- - zltigo   QUOTE (GetSmart @ Aug 29 2015, 13:43) У ц...   Aug 29 2015, 11:35
|- - GetSmart   Цитата(zltigo @ Aug 29 2015, 15:35) Вот п...   Aug 29 2015, 12:08
- - aaarrr   Что касается предупреждений по поводу управляющего...   Aug 29 2015, 11:25
|- - GetSmart   Для zltigo: Качество кода ремарками не измеряется....   Aug 29 2015, 16:57
|- - zltigo   QUOTE (GetSmart @ Aug 29 2015, 19:57) Для...   Aug 29 2015, 17:29
|- - GetSmart   Цитата(zltigo @ Aug 29 2015, 21:29) Писат...   Aug 29 2015, 17:39
|- - zltigo   QUOTE (GetSmart @ Aug 29 2015, 20:39) Кри...   Aug 29 2015, 17:47
|- - ViKo   Цитата(zltigo @ Aug 29 2015, 20:47) А смы...   Aug 29 2015, 18:05
||- - zltigo   QUOTE (ViKo @ Aug 29 2015, 21:05) На то е...   Aug 29 2015, 18:07
||- - ViKo   Цитата(zltigo @ Aug 29 2015, 21:07) Повто...   Aug 29 2015, 18:14
||- - zltigo   QUOTE (ViKo @ Aug 29 2015, 21:14) Напомни...   Aug 29 2015, 18:39
||- - aaarrr   Цитата(zltigo @ Aug 29 2015, 21:39) В воп...   Aug 29 2015, 18:44
|||- - zltigo   QUOTE (aaarrr @ Aug 29 2015, 21:44) Как В...   Aug 29 2015, 19:00
||- - aaarrr   Цитата(zltigo @ Aug 29 2015, 21:39) Частн...   Aug 29 2015, 19:10
|||- - zltigo   QUOTE (aaarrr @ Aug 29 2015, 22:10) Чисто...   Aug 29 2015, 19:28
||- - GetSmart   Цитата(zltigo @ Aug 29 2015, 22:39) Не со...   Aug 29 2015, 23:04
||- - zltigo   QUOTE (GetSmart @ Aug 30 2015, 02:04) Пре...   Aug 30 2015, 07:03
||- - GetSmart   Цитата(zltigo @ Aug 30 2015, 11:03) Делен...   Aug 30 2015, 10:11
||- - zltigo   QUOTE (GetSmart @ Aug 30 2015, 13:11) Рем...   Aug 30 2015, 10:17
|- - GetSmart   Цитата(zltigo @ Aug 29 2015, 21:47) Warni...   Aug 29 2015, 18:14
- - scifi   Гы-гы. Развели мегасрач на пустом месте. Модератор...   Aug 29 2015, 11:57
- - Golikov A.   ЦитатаОшибку того, что программист получил не то, ...   Aug 29 2015, 15:42
|- - zltigo   QUOTE (Golikov A. @ Aug 29 2015, 18:42) Г...   Aug 29 2015, 16:01
|- - aaarrr   Препроцессор тут с визгом притянут за уши. Это не ...   Aug 29 2015, 16:07
|- - zltigo   QUOTE (aaarrr @ Aug 29 2015, 19:07) Препр...   Aug 29 2015, 16:20
||- - aaarrr   Цитата(zltigo @ Aug 29 2015, 19:20) Что э...   Aug 29 2015, 17:12
||- - zltigo   QUOTE (aaarrr @ Aug 29 2015, 20:12) 1 - э...   Aug 29 2015, 17:39
||- - aaarrr   Цитата(zltigo @ Aug 29 2015, 20:39) А где...   Aug 29 2015, 18:18
|- - zltigo   QUOTE (aaarrr @ Aug 29 2015, 19:07) Препр...   Aug 30 2015, 08:53
- - ViKo   Кстати, я никогда не пишу #if (0) или #if (1), а т...   Aug 29 2015, 17:40
3 страниц V   1 2 3 >


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

 


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


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