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

 
 
13 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> Детская ошибка
Tahoe
сообщение May 7 2016, 05:14
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(amiller @ May 7 2016, 05:52) *
Представленный фрагмент кода имеет только один смысл - продемонстрировать наличие проблемы в действиях компилятора.

Представленный фрагмент ничего не демонстрирует, от слова "вообще". Особенно, проблем с компилером. Единственное, что он демонстрирует, это лень и, как следствие, дурную манеру изложения, в стиле "Рабинович напел".
Go to the top of the page
 
+Quote Post
amiller
сообщение May 7 2016, 05:37
Сообщение #32


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

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



Цитата(Tahoe @ May 7 2016, 08:14) *
Представленный фрагмент ничего не демонстрирует, от слова "вообще". Особенно, проблем с компилером. Единственное, что он демонстрирует, это лень и, как следствие, дурную манеру изложения, в стиле "Рабинович напел".

А кроме голословных утверждений Вам есть что сообщить? В чём именно заключается лень или дурные манеры?
Чтобы убедиться в том, а чём я пишу, достаточно:
1. Вставить в программу фрагмент кода (соответствующим образом изменив названия типов).
2. Откомпилировать. Убедиться, что начиная с условного оператора в листинге код не формируется, а предупреждений не выдается.
3. Поменять типы на int32u (или uint32_t, как удобно).
4. Снова откомпилировать,убедиться, что в листинге код есть, хотя результат условного оператора также предопределен, как и в первом случае.
5. Задуматься, возможно сделать выводы.
6. Если понятна причина такого поведения компилятора, рассказать автору вопроса.
7. Если причина неизвестна, то лучше промолчать, а не опускаться до стиля "сам дурак".
Go to the top of the page
 
+Quote Post
aiwa
сообщение May 7 2016, 07:59
Сообщение #33


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(amiller @ May 7 2016, 08:37) *
2. .....Убедиться, что начиная с условного оператора в листинге код не формируется, а предупреждений не выдается.


Стандарт С++. 5.3.1 Unary operators.
8 The operand of the unary - operator .....
Integral promotion is performed on integral or enumeration operands. .....
The type of the result is the type of the promoted operand.

Т.е. стандарт предписывает все целочисленные типы, а это харе-образные, с "int" и enum, расширять до знакового int и так далее в зависимости от размера.
Тип результата - расширенный операнд.
В случае с int16u результатом операции будет "signed int". Также как и ,например, результат операции (char) + (char) -> signed int;

Но вопрос Вы подняли правильно. Очень надеюсь, что найдутся разработчики компилятора, которые проигнорируют
маразматические моменты исторически сложившегося стандарта.

Сообщение отредактировал aiwa - May 7 2016, 08:00
Go to the top of the page
 
+Quote Post
svss
сообщение May 7 2016, 09:24
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594



Цитата(amiller @ May 7 2016, 11:37) *
...
5. Задуматься, возможно сделать выводы.
...
Предлагаю один: не полагаться на компилятор /что он все приведения типов и приоритеты операций соблюдёт/
Расставляйте скобки и явные касты. (это не я придумал: жизнь учит)

Одноразовое изделие - одно, о нём и темы нет. Как только нужна переносимость кода весь геморрой - ваш.
Если соломку не стелить регулярно.
Темы о глюках компиляторов, стандартах и их (не)соблюдении вечны как и холивар.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 7 2016, 10:25
Сообщение #35


Гуру
******

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



QUOTE (svss @ May 7 2016, 12:24) *
не полагаться на компилятор /что он все приведения типов и приоритеты операций соблюдёт/

Вообще то он СОБЛЮДЕТ! Лет 25 уже основные компиляторы сколь-нибудь явных ошибок НЕ допускают.
QUOTE
Расставляйте скобки и явные касты. (это не я придумал: жизнь учит)

А вот это скоерее, да. Только НЕ для компилятора, а для себя, ибо в отличие от компилятора человку сложнее держать в голове те же 15 уровней приоритета.
Но и маниакально распихивать скобки и приведения типов тоже не дело.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Tahoe
сообщение May 7 2016, 13:47
Сообщение #36


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(amiller @ May 7 2016, 08:37) *
А кроме голословных утверждений Вам есть что сообщить?
...
2. Откомпилировать. Убедиться, что начиная с условного оператора в листинге код не формируется, а предупреждений не выдается.

Я все сообщил еще в своем первом ответе. И почему код отсутствует, и что запустить, что бы увидеть желаемое предупреждение.

Код, приведенный в первом посте - бессмысленный. С какой стати компилер должен предупреждать об этом? Это широко распространенный прием, например при условной компиляции, когда часть кода намеренно превращается бессмысленное. С какой стати компилеру лезть не в свое дело? Откуда он знает, это программер бестолково пишет, как в данном случае или код заточен под 100500 вариантов? А вот статический анализатор, тот не просто предупредит, вопить будет. Однако отсутствие вопросов и комментариев по статическому анализатору, говорит о том, что даже не понятно, о чем вообще речь. Так может, чем продолжать дерзить, запустить хоть раз C-STAT или хотя бы выяснить, что это такое?
Go to the top of the page
 
+Quote Post
amiller
сообщение May 7 2016, 14:04
Сообщение #37


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

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



Цитата(Tahoe @ May 7 2016, 16:47) *
Так может, чем продолжать дерзить, запустить хоть раз C-STAT или хотя бы выяснить, что это такое?

Ну извините пожалуйста. Я сразу не обратил внимание, что Вы из Москвы. Простите молодого пятидесятилетнего провинциала, что я вообще вступил с Вами в дискуссию.
Мне надо было посыпать голову пеплом и с восторгом внимать Вам.
Только напомните мне пожалуйста, что именно Вы сказали по существу конкретного вопроса, который я задал?
Go to the top of the page
 
+Quote Post
Tahoe
сообщение May 7 2016, 16:06
Сообщение #38


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(amiller @ May 7 2016, 17:04) *
сразу не обратил внимание, что Вы из Москвы. Простите молодого пятидесятилетнего провинциала

Не понял, как это относится к запуску C-STAT, зато стало ясно, что имею дело с очередным не признанным гением. В этом месте позвольте откланяться. Удачи.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение May 7 2016, 16:57
Сообщение #39


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(scifi @ May 6 2016, 16:29) *
Предупреждения придуманы для удобства. Они помогают отловить ошибки в коде. Нет никаких стандартов, регламентирующих поведение компилятора в этом вопросе. Более того, авторы компилятора тоже никаких обязательств здесь на себя не берут.

странно, в одном случае берут, в другом таком же - не берут
а не проще ли было писать компилятор так, что во всех случаях выдавать предупреждение, а не когда как
Go to the top of the page
 
+Quote Post
amiller
сообщение May 7 2016, 17:33
Сообщение #40


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

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



Цитата(Tahoe @ May 7 2016, 19:06) *
Не понял, как это относится к запуску C-STAT, зато стало ясно, что имею дело с очередным не признанным гением. В этом месте позвольте откланяться. Удачи.

Как же Вы любите ярлыки навешивать... Вообще то мои слова появились в ответ на Ваше "продолжать дерзить".
По моему Вы вообще не поняли, о чём идёт речь.
1. Я не прошу помощи в написании кода или в оценке его качества.
2. Не нужно советов по использованию дополнительного ПО, так как это совсем не относится к делу.
3. И речь не шла о правильности или эффективности примера, его (примера) задача - продемонстрировать описанную проблему.
В своем сообщении я описал проблему в работе компилятора, которую увидел.
И хотел выяснить нормальное это поведение или нет и почему компилятор ведёт себя по разному в похожих случаях.
А конкретная задача в написании программы была решена ещё до того, как было написано сообщение.
Ведь не все вопросы обязаны быть на тему "помогите, не работает...".
Go to the top of the page
 
+Quote Post
scifi
сообщение May 7 2016, 18:27
Сообщение #41


Гуру
******

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



Цитата(Огурцов @ May 7 2016, 19:57) *
а не проще ли было писать компилятор так, что во всех случаях выдавать предупреждение, а не когда как

Не знаю. Сколько компиляторов вы сделали? Я - ни одного. Потому и не знаю.
Go to the top of the page
 
+Quote Post
aiwa
сообщение May 7 2016, 20:41
Сообщение #42


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(Огурцов @ May 7 2016, 19:57) *
а не проще ли было писать компилятор так, что во всех случаях выдавать предупреждение, а не когда как

Та тут как бы компилятор и не виноват, он всего лишь следует предписаниям стандарта.
Даже дело не в в отсутствии предупреждения, в нарушении законов булевой алгебры.
Но желание преемственности побеждает здравый смысл.


Go to the top of the page
 
+Quote Post
Огурцов
сообщение May 7 2016, 21:59
Сообщение #43


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



вы можете между собой договориться, есть в предписании стандарта речь про предупреждения или нет ?
Go to the top of the page
 
+Quote Post
aiwa
сообщение May 7 2016, 22:31
Сообщение #44


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(Огурцов @ May 8 2016, 00:59) *
вы можете между собой договориться, есть в предписании стандарта речь про предупреждения или нет ?

А о чем должно быть предупреждение?
В сухом остатке получается переменная булевого типа, равная нулю. А само нарушение закона двойного отрицания происходит
в процессе обработки выражения.
Причем, в старых 16-битных компиляторах обработка происходит корректно.

Go to the top of the page
 
+Quote Post
zltigo
сообщение May 8 2016, 03:44
Сообщение #45


Гуру
******

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



QUOTE (aiwa @ May 8 2016, 01:31) *
Причем, в старых 16-битных компиляторах обработка происходит корректно.

Маразм процветает sad.gif. Причем тут "старые", или "новые" - в огороде бузина а в Киеве дядька sad.gif. Компиляция такого "примера" зависит от разрядности int целевой платформы и ни от чего более.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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