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

 
 
> C: x+++y, что будет вычислено?
ViKo
сообщение Apr 27 2015, 08:26
Сообщение #1


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

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



Нет явной однозначности выполнения:
x++ + y
x + ++y
Получается, зависит от наличия-отсутствия пробелов. Непорядок. Или как?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
Эдди
сообщение Apr 27 2015, 08:28
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Undefined behaviour же!
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Apr 27 2015, 08:41
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(ViKo @ Apr 27 2015, 09:26) *
Нет явной однозначности выполнения:
x++ + y
x + ++y
Получается, зависит от наличия-отсутствия пробелов. Непорядок. Или как?


Ну, если делать нечего и лень ставить скобки, то читать тут:
http://en.cppreference.com/w/c/language/operator_precedence

А лучше ставить скобки и голова болеть не будет.
Go to the top of the page
 
+Quote Post
XVR
сообщение Apr 27 2015, 09:25
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(ViKo @ Apr 27 2015, 11:26) *
Нет явной однозначности выполнения:
x++ + y
x + ++y
Получается, зависит от наличия-отсутствия пробелов. Непорядок. Или как?
Или как. Лексемы набираются по принципу 'чем длине, тем лучше'. Потом на них уже делается синтаксический анализ, и даже если он дает ошибку другие варианты разбиения на лексемы не рассматриваются.
Так что в вашем случае - 1й вариант однозначно

Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 27 2015, 09:38
Сообщение #5


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

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



Цитата(XVR @ Apr 27 2015, 11:25) *
Или как. Лексемы набираются по принципу 'чем длине, тем лучше'. Потом на них уже делается синтаксический анализ, и даже если он дает ошибку другие варианты разбиения на лексемы не рассматриваются.
Так что в вашем случае - 1й вариант однозначно

То, что первый вариант, оно понятно. Я обращаю внимание на то, что иногда наличие или отсутствие пробелов имеет значение. А именно: x+ ++y vs x+++y.
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Apr 27 2015, 10:18
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(ViKo @ Apr 27 2015, 10:38) *
То, что первый вариант, оно понятно. Я обращаю внимание на то, что иногда наличие или отсутствие пробелов имеет значение. А именно: x+ ++y vs x+++y.


Девелопер, который пишет любой из вариантов кода: "x+ ++y" или "x+++y" подлежит побиванию камнями. Обсуждать тут особо нечего sm.gif
На собеседованиях иногда могут задать подобный вопрос, но таких собеседователей лучше сразу посылать.
Go to the top of the page
 
+Quote Post
XVR
сообщение Apr 27 2015, 10:42
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(ViKo @ Apr 27 2015, 12:38) *
Я обращаю внимание на то, что иногда наличие или отсутствие пробелов имеет значение
Имеет, но не -
Цитата
Нет явной однозначности выполнения

однозначность как раз есть. И строки -
Код
x++ + y
x + ++y
просто разные.

Вот очень яркий пример значимости пробела:
Код
std::vector<std::pair<std::string,std::string>> syntax_error;
std::vector<std::pair<std::string,std::string> > Ok;
1я строка сломается при компиляции (но не в С++11), вторая прожуется без ошибок

В С++11 на это дело сделали костыль (на уровне языка) smile3046.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 27 2015, 11:05
Сообщение #8


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

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



Цитата(CrimsonPig @ Apr 27 2015, 12:18) *
Девелопер, который пишет любой из вариантов кода: "x+ ++y" или "x+++y" подлежит побиванию камнями. Обсуждать тут особо нечего sm.gif

А по мне лишние скобки - это как одевать по 2 презерватива. biggrin.gif
P.S. я ими (предохранителями) и не пользуюсь, нет ли здесь связи...?
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Apr 27 2015, 11:31
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(ViKo @ Apr 27 2015, 12:05) *
А по мне лишние скобки - это как одевать по 2 презерватива. biggrin.gif
P.S. я ими (предохранителями) и не пользуюсь, нет ли здесь связи...?


А, ну теперь понятно, почему культура программирования в целом очень сильно упала за последние годы, на это есть как минимум 2 причины sm.gif
И аргументы в теле макросов тоже не заключаете в "лишние" скобки ?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 27 2015, 11:38
Сообщение #10


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

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



Цитата(CrimsonPig @ Apr 27 2015, 13:31) *
А, ну теперь понятно, почему культура программирования в целом очень сильно упала за последние годы, на это есть как минимум 2 причины sm.gif
И аргументы в теле макросов тоже не заключаете в "лишние" скобки ?

Если я и повлиял на культуру программирования, то только на свою, плюс-минус... Вам же я не мешаю еще и на голову надеть презерватив, чтобы уж наверняка перестраховаться. rolleyes.gif
Макросы скобками охватываю, если нужно.
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 2 2015, 07:21
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(CrimsonPig @ Apr 27 2015, 16:18) *
Девелопер, который пишет любой из вариантов кода: "x+ ++y" или "x+++y" подлежит побиванию камнями.

А который пишет: x + ++y ? ;-)
Цитата(CrimsonPig @ Apr 27 2015, 16:18) *
На собеседованиях иногда могут задать подобный вопрос, но таких собеседователей лучше сразу посылать.

Может эти собеседователи и ожидают , что Вы скажете "так писать недопустимо безотносительно того - работает это или нет, ибо 'стиль оформления и читаемость исходника'".
А если начнёте думать и пытаться решить, то результат: "Вы не прошли собеседование". :-D
Go to the top of the page
 
+Quote Post

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

 


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


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