Pull to refresh

Задачка "Hello World"

Reading time1 min
Views6.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, если триграфы учитываются.
Tags:
Hubs:
Total votes 129: ↑101 and ↓28+73
Comments183

Articles