- Код: Выделить всё
int a=5;
a = ++a + ++a;
чему будет равно "a" в С, С++, C#?
--
/Просьба, господ: CY, PV, SNB/ не заморачиваться, вопрос не вам.
---
для тех кто ответит: ответьте за одно на вопрос - "а почему?"
int a=5;
a = ++a + ++a;
Anri писал(а):"a" в С
AJ писал(а):Anri писал(а):"a" в С
мне думается тринадцать - так подсказывает мой опыт программирования контроллеров на Си:)хотя я не программист(с)
snb писал(а):Да, смешно получается, я тоже думал, что в C++/C# будет одинаково, т.е. 13. Понял фишку, как раз после дизассемблирования С++.
Вот почему я уже давно не использую инкремент в одной строке с другими операциями. Чтобы потом голову ни я, ни другие голову не сломали, как это все работает.
Точно! Именно такъ и было написано…. Результатъ не гарантируется…PV писал(а):А на самом деле правильный ответ для C и C++ - "неопределено".
PV писал(а):А на самом деле правильный ответ для C и C++ - "неопределено". И дизассемблированием на него не ответишь, т.к. другой компилятор, или уже следующая версия того же компилятора, или тот же компилятор, но с другими флажками сгенерит совсем разный код. Читайте стандарты.
Поэтому человека, пишушего так, надо бить линейкой по рукам. А если это не студент и эта дрянь пишется в реальную программу - то отводить в лесок и бить прикладом в висок.
Alex ilmarranen писал(а):Точно! Именно такъ и было написано…. Результатъ не гарантируется…PV писал(а):А на самом деле правильный ответ для C и C++ - "неопределено".
Про остальные ничё не знаю… не знакомъ
PV писал(а):отводить в лесок и бить прикладом в висок.
Anri писал(а):это ты странные контроллеры на С программировал . точнее ты их тогда с ошипкой
Anri писал(а):PV писал(а):А на самом деле правильный ответ для C и C++ - "неопределено". И дизассемблированием на него не ответишь, т.к. другой компилятор, или уже следующая версия того же компилятора, или тот же компилятор, но с другими флажками сгенерит совсем разный код. Читайте стандарты.
Поэтому человека, пишушего так, надо бить линейкой по рукам. А если это не студент и эта дрянь пишется в реальную программу - то отводить в лесок и бить прикладом в висок.
ты как тот пашляк.. нет выпить и закусить, а он ещё дефку и ф кусты .
Паш, в С так и останется. Для всех версий. поверь. "++" - всегда одно и то же.
Anri писал(а):Подождём наших студентов из Fachhochschulen. Может они узнают? Тем паче, что они писали для одноголовых кристалов. Там точно - стандарт инкремента .
Anri писал(а):Кстати, Паш, а вот я теюя сдам юниксоидам. Они тебя слюнами зальют и анафеме придадут за то, шо ты написал . Для них ЭТО как раз "определено" и однозначно. Они меня заспорили и я здалсо /один хрен я не ф курсе ихней специфики /
Ну для С++… Съ чистымъ С дела не имелъ…Anri писал(а):не.. так не пойдёт. на сегодня: гарантировано. как минимум для С
тада дай ответ для С. Как будет там. Тем паче, что ты у нас безопасник и тебе положено иметь доступ к языкам совсем более-низкого уровня
snb писал(а):PV писал(а):отводить в лесок и бить прикладом в висок.
Все-таки, Паш, USA сделали тебя жестоким. То отдельности почикать предлагаешь, то прикладом в висок…
Alex ilmarranen писал(а):Съ чистымъ С дела не имелъ…
Alex ilmarranen писал(а):http://slil.ru/26372832
Alex ilmarranen писал(а):Ну для С++… Съ чистымъ С дела не имелъ…Anri писал(а):не.. так не пойдёт. на сегодня: гарантировано. как минимум для С
тада дай ответ для С. Как будет там. Тем паче, что ты у нас безопасник и тебе положено иметь доступ к языкам совсем более-низкого уровня
http://slil.ru/26372832
На дисплее a=14
Alex ilmarranen писал(а):На самомъ деле да… я самъ вотъ уже не поленился и нашёлъ…На 2005 годъ было неопределённо…
Alex ilmarranen писал(а):2snb Чё та да… не предположилъ наличия такой возможности…
File1.cpp.11: int a=5;
0040116C C745FC05000000 mov [ebp-04],00000005
File1.cpp.12: a = ++a + ++a;
00401173 FF45FC inc dword ptr [ebp-04]
00401176 FF45FC inc dword ptr [ebp-04]
00401179 8B45FC mov eax,[ebp-04]
0040117C 0145FC add [ebp-04],eax
Alex ilmarranen писал(а):Включилъ все варианты оптимизации…
Можетъ у меня CodeGear 2009 - некавайно?
AJ писал(а):Anri писал(а):это ты странные контроллеры на С программировал . точнее ты их тогда с ошипкой
я и не претендовал на последнюю инстанцию:) Но.. я сейчас в Протеусе (такая прога для моделирования микропроцессорных устройств) соединил контроллер ATMega16 и LCD. Написал прогу имеено что такую:
int k = 5;
k = ++k + ++k;
sprintf(lcd_buffer,"encoder=%d, k=%d",pos, k);
ну и там обвески по мелочи. И на дисплее горит k=13. вот.
AJ писал(а):Anri писал(а):это ты странные контроллеры на С программировал . точнее ты их тогда с ошипкой
Alex ilmarranen писал(а):
- Код: Выделить всё
File1.cpp.11: int a=5;
0040116C C745FC05000000 mov [ebp-04],00000005
File1.cpp.12: a = ++a + ++a;
00401173 FF45FC inc dword ptr [ebp-04]
00401176 FF45FC inc dword ptr [ebp-04]
00401179 8B45FC mov eax,[ebp-04]
0040117C 0145FC add [ebp-04],eax
Включилъ все варианты оптимизации…
Можетъ у меня CodeGear 2009 - некавайно?
PV писал(а): (который теперь CodeGear) умел неплохо оптимизировать еще 15 лет назад.
После нормальной оптимизации вообще вся переменная и все операции с ней будут выкиты. Из головы - выглядеть будет примерно так:
PUSH 14 ;or whatever
CALL printf
Зарегистрированные пользователи: Bing [Bot], DotBot [Crawler], Google [Bot], SEMrush [Бот], Trendiction [Бот]