Как стать автором
Обновить

Задачка "Hello World"

Время на прочтение1 мин
Количество просмотров6.7K
Итак, вопрос знатокам: Сколько раз на экране появится заветная фраза при выполнении этой программы?

#include <iostream>
int main(int argc, char* argv[])
{
   int i = 10;
   std::cout<<"Hello World!"<<std::endl;
   // Сколько раз???
   while(i--)
   {
      // Сколько раз будет вызвана эта строка???/
      for(int j=0; j<10; j++)
         std::cout<<"Hello World!"<<std::endl;
   }
   return 0;
}

Решение


Обратите внимание на комментарии. Дело в том, что символ ??/ — это, так называемый, триграф.

Ниже перечислены основные триграфы:


Триграф (Эквивалентный символ)
??=      #
??/      \
??'      ^
??(      [
??)      ]
??!      |
??<      {
??>      }
??-      ~

Триграфы использовались во времена языка Си когда не на всех клавиатурах были заменяемые символы. Что интересно — данная особенность по-прежнему позволяет «пудрить мозги» даже в Visual Studio 2008, хотя необходимость в использовании триграфов давно отпала. Хотя стоит отдать должное компилятор от Microsoft выдает соответствующее предупреждение. GCC, в данном случае, оказался более «современным» и триграфы просто игнорирует.

Таким образом следующая за триграфом ??/ строка будет добавлена к комментарию (действие "\" обратного слеша)

Ответ


Ответ будет разным в зависимости от компилятора и его настроек: 101 либо 11, если триграфы учитываются.
Теги:
Хабы:
Всего голосов 129: ↑101 и ↓28+73
Комментарии183

Публикации

Истории

Работа

QT разработчик
8 вакансий
Программист C++
133 вакансии

Ближайшие события