Итак, вопрос знатокам: Сколько раз на экране появится заветная фраза при выполнении этой программы?
Обратите внимание на комментарии. Дело в том, что символ ??/ — это, так называемый, триграф.
Триграф (Эквивалентный символ)
Триграфы использовались во времена языка Си когда не на всех клавиатурах были заменяемые символы. Что интересно — данная особенность по-прежнему позволяет «пудрить мозги» даже в Visual Studio 2008, хотя необходимость в использовании триграфов давно отпала. Хотя стоит отдать должное компилятор от Microsoft выдает соответствующее предупреждение. GCC, в данном случае, оказался более «современным» и триграфы просто игнорирует.
Таким образом следующая за триграфом ??/ строка будет добавлена к комментарию (действие "\" обратного слеша)
Ответ будет разным в зависимости от компилятора и его настроек: 101 либо 11, если триграфы учитываются.
#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, если триграфы учитываются.