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

 
 
> Косяк у Кейла, Препроцессор не следит за скобками
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
Ответов
Golikov A.
сообщение Aug 29 2015, 06:22
Сообщение #2


Гуру
******

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



Цитата
Уже писал - в стандарте нет запрета на использование русских матерных слов

ну как же нет? Есть стандарт формирования имен переменных и список ключевых слов. Ваши матерные выражения не попадают в множество которые возможно создать по данным правилам, потому их и нельзя использовать....

Цитата
Так-что давайте Вы свой талант толкователя стандартов будете демонстрировать не мне.

А вы не читайте....

Цитата
Хотя компилятор ругается предупреждением (не компилятор, а сама среда в Кейле значок ставит).

а что за значок?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 29 2015, 07:10
Сообщение #3


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

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



Цитата(Golikov A. @ Aug 29 2015, 09:22) *
а что за значок?

Восклицательный знак в желтом треугольнике напротив опасной строки. rolleyes.gif И подчеркивает красненьким опасное место.
При наведении мыши на подчеркнутое или на значок выдается:
warning: operator '<<' has lower precedence than '+'; '+' will be evaluated first
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 29 2015, 14:55
Сообщение #4


Гуру
******

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



Цитата(ViKo @ Aug 29 2015, 10:10) *
Восклицательный знак в желтом треугольнике напротив опасной строки. rolleyes.gif И подчеркивает красненьким опасное место.
При наведении мыши на подчеркнутое или на значок выдается:
warning: operator '<<' has lower precedence than '+'; '+' will be evaluated first
На самом деле предупреждает не зря. Одно дело 1 << 7 + 16, а сам неоднократно накалывался на word = byte1 << 8 + byte2, хотя точно знаю, что приоритет у сложения выше. И только благодаря этому предупреждению не тратил время на поиски очевидной, но тем не менее пролетающей между глаз ошибки.

По поводу вашего спора о do {} while (0). Единственное место, где это выражение необходимо - подобный функции макрос из более чем одного выражения. Который можно не задумываясь и однообразно вставлять в любое место, где допустим вызов функции, в том числе и в выражение if(cond) macro(); else ... И идите лесом с убеждениями меня в бессмысленности while(0) - он здесь делает именно то, что от него требуется. И я буду его использовать в линейном коде do { if(!func1()) break;... if(!func2()) break; ..... } while(0); потому что это совершенно однозначная конструкция, существенно упрощающая исходник. И мне глубоко фиолетово, что кому-то она эстетически неприятна.


--------------------
На любой вопрос даю любой ответ
"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
ViKo
сообщение Aug 29 2015, 17:37
Сообщение #5


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

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



Цитата(Сергей Борщ @ Aug 29 2015, 17:55) *
На самом деле предупреждает не зря. Одно дело 1 << 7 + 16, а сам неоднократно накалывался на word = byte1 << 8 + byte2, хотя точно знаю, что приоритет у сложения выше. И только благодаря этому предупреждению не тратил время на поиски очевидной, но тем не менее пролетающей между глаз ошибки.

Согласен, здесь приоритеты не очевидны. Может, действительно, не жалеть скобок...
Надо было сделать приоритеты этих операторов равными.
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
- - aaarrr   Бессмысленной можно было бы признать запись while(...   Aug 28 2015, 15:18
- - 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
|- - zltigo   QUOTE (Сергей Борщ @ Aug 29 2015, 17:55) ...   Aug 29 2015, 14:59
- - 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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