«Знатоки» компилятора Microsoft C/C++


Но однажды, придя в комнату после утренних занятий, чтобы собраться на обед, аспер застал двух мальчиков в углу, которые о чем-то спорили довольно ожесточенно (один из них, вроде бы, представлялся психологом, а другой — музыкантом). Аспер собирался, не обращая на них внимание, пока его не привлекли странные повторяющиеся конструкции в их речи, и тут он поневоле прислушивался, но расслышать мог только «плюс плюс плюс плюс». После третьего раза аспер не выдержал и спросил:

— Уважаемые, расскажите, о чем вы спорите, стало интересно!

Мальчик с готовностью повернулся и разъяснил:

— Да простая задачка, но никто с ходу не может ответить. Короче, дано:
i=5;
i=i+++++i;
Чему будет равно i после выполнения?

Аспер стал вспоминать приоритеты операций инкремента, что вспоминалось плохо, поскольку сам аспер в жизни не написал ни одной программы, разве что обучал студентов это делать. Люди вокруг, подключившись к дискуссии, тоже стали предлагать разные варианты, кто-то говорил, что будет тринадцать, кто-то четырнадцать, кто-то пятнадцать, и постепенно все русскоговорящие мальчики, находившиеся в комнате, которые до этого представлялись кем угодно — психологами, музыкантами, философами, тренерами по аэробике или строителями аквариумов, постепенно подключились к дискуссии, перекрикивая друг друга, упоминая унарность и бинарность операций, стандарты ANSI, парсинг слева-направо и справа-налево и прочие не менее интересные термины.

В дискуссию не втянулись только трое: голландец по фамилии Йоб, который не знал русского, девочка Анна гламурного вида, которая сидела на верхней парте и меряла юбочку, одновременно подкрашивая ногти лаком, и девочка Z. (в свое время с золотой медалью закончившая гуманитарную английскую школу, а ныне заканчивающая истфак ПГУ). Аспер оглядел комнату и ужаснулся — неужели из пятнадцати человек в комнате только трое не принадлежат к презренному племени айтишников?

И когда разговор в тусовке уже достиг накала неразрешимости, и сторонники того, что получится тринадцать, объединившись со сторонниками того, что получится пятнадцать, хотели уже бить сторонников того, что получится четырнадцать, девочка Анна докрасила последний ноготь, окончательно выбрала юбочку, в которой она пойдет танцевать, подняла голову и сказал:

— Ну, в майкрософтских компиляторах, Visual C, например, просто запрещены префиксные инкременты, так что тут он тупо выдаст ошибку и скомпилировать не даст, я проверяла.

Все в ужасе обернулись к девочке Анне, которая закрывала пузырек лака для ногтей, и в образовавшейся секунде молчания аспер поинтересовался, как же стандарты ANSI, на что Анна сказала, что майкрософту всегда было пофиг на стандарты, а вообще предложенная задача в принципе зависит от компилятора, и надо компилировать во всех доступных средах и смотреть, что получится.

Источник

Один из комментариев:
Аспер, это какой-то тяжелый бред. О чем тут спорить? Всем известно, что всё зависит от компилятора, и Visual C таки да пошлет нахуй.

Если проверить, то cl.exe из комплекта Visual Studio 2008 все же благополучно компилирует программу и никуда не посылает.

int main()
{
  int i = 5;
  printf("i = %d\n", i);
  i = i++ + ++i;
  printf("i++ + ++i = %d\n", i);
  return 0;
}

cl.exe благополучно компилирует программу с префиксным и постфиксным инкрементированием

Реклама
Запись опубликована в рубрике software с метками , , . Добавьте в закладки постоянную ссылку.

4 комментария на ««Знатоки» компилятора Microsoft C/C++»

  1. ivladislaw:

    Читал не менее интересную чепуху:
    -Windows Media Player написан на ASP.NET.
    http://otvety.google.ru/otvety/thread?tid=5958c8c50385e33e
    Вообще, стоит почитать тот диалог:) «Спросите у экспертов» в Google — очень надёжный источник информации:)
    — В Visual Studio нельзя писать код.(не помню где)

    • Да, забавные товарищи.
      Ещё вспомнилось, как меня товарищ с репутацией хакера и программиста C/C++ порадовал фразой: «Вообще-то GUID всегда был строкой».

  2. забавно то, что результат будет разный для C++ и для C#. Проверьте!
    (Я лет пять назад с этим игрался.)

    • Действительно, программа

      using System;
      
      class Program
      {
        static void Main()
        {
          int i = 5;
          Console.WriteLine("i = {0}", i);
          i = i++ + ++i;
          Console.WriteLine("i++ + ++i = {0}", i);
        }
      }

      даёт следующий вывод:

      i = 5
      i++ + ++i = 12

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s