Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как же компилятор разбивает код на лексемы? или как работает код вида var+++var 
:(
    Опции темы
Etar
  Дата 21.2.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 21.2.2008

Репутация: нет
Всего: 1



Здравствуйте!
Объясните пожалуйста как же работает этот код? Никак не могу уловить логики компилятора

Код

        int x;
        
        x = 1;
        x = x+++x; // 3
        
        x = 1;
        x = x++ + x; // 3
        
        x = 1;
        x = x+ ++x; // 3
        
        x = 1;
        x = x + + + x; // 2
        
        x = 1;
        x = (x++)+x; // 3
        
        x = 1;
        x = x+(++x); // 3


Спасибо!
PM MAIL   Вверх
merge
Дата 21.2.2008, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 20.3.2007

Репутация: нет
Всего: 1



Код

        int x;
        
        //Одно итоже действие. записано по разному. вначале компилятор смотрит на первый два плюса, затем смотрит на следующий (третий) плюс. Выполяет его(х==2). а затем прибавляет еденицу к x. (х==3)
        // почему эти выражения выполняются одинакого - читай про последовательность выполнения операций
        x = 1;
        x = x+++x; // 3
        x = 1;
        x = (x++)+x; // 3
        x = 1;
        x = x++ + x; // 3
        
        // здесь вначале делает ++х (х==2). затем складывает 2+2 (х==4)
        x = 1;
        x = x+(++x); // 4 // Врун! здесь 4 получается!
        x = 1;
        x = x+ ++x; // 4

        // здесь первый знак + идет не слитно с переменной, следовательно выполяем еог как обычный +.
        x = 1;
        x = x + + + x; // 2


Это сообщение отредактировал(а) merge - 21.2.2008, 12:24
PM MAIL   Вверх
xvr
Дата 21.2.2008, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Etar @ 21.2.2008,  12:04)
Здравствуйте!
Объясните пожалуйста как же работает этот код? Никак не могу уловить логики компилятора

Никак данный код не работает  smile Сплошные 'Неопределенное Поведение'
Собственно лексемы набираются просто по наиболее длинной последовательности.

Код

        int x;
        
        x = 1;
        x = x+++x; // 3

Соотвествует x = (x ++) + x;  - Значение не определено: Двойная модификация переменной x (постинкремент и присваивание) между точками следования.

Код

        x = 1;
        x = x++ + x; // 3

Аналогично предыдущему пункту

Код

        x = 1;
        x = x+ ++x; // 3
        
Соотвествует x =x + (++ x);  - Значение не определено: Двойная модификация переменной x (преинкремент и присваивание) между точками следования.

Код

        x = 1;
        x = x + + + x; // 2
        
Соотвествует x = x + (+ ( +x)); - Второй и 3й + это унарные операции '+', результат:  2

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.