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

С++ для Perl программистов

Время на прочтение1 мин
Количество просмотров5.5K
Есть старая шутка, что программист на фортране будет писать на фортране на любом языке программирования.

Вот программа на 3 строки, которая компилируется любым C++11 компилятором, после этого нормально запускается и работает.
int main(){
    return !<:]()<%;[=:>(){<:&](){;%>();%>();};
}


Пример в Online IDE
В принципе эту строку можно использовать как детектор на C++ программистов — не все сразу могут понять как это работает.


Пост был написан как социальный эксперимент. С моей точки зрения профессионал должен досконально разбираться в своем инструменте. Если вы догадались что происходит в коде — пишите в комментариях.

Чтобы не терять интригу объяснение под спойлером:
Спойлер
int main(){
    return ![](){;  
       [=](){
          [&](){;}();
       }();
    };
}

Просто некоторые символы заменены диграфами.
Диграфы это часть языка и стандарта ISO C 99 Диграфы. Для С++ есль еще Триграфы. Правда в большинстве компиляторов C++ триграфы отключены по умолчанию. Но сишные диграфы включены.

Появились все эти *-графы потому, что семибитная кодовая страница ISO/IEC 646 (1972 г.) отводила некоторые символы [, ], {, }, ^, ~ под национальные, поэтому нужно было обеспечить совместимость исходного кода с новым стандартом. Так <: — это эквивалент открывающей квадратной скобки.

Время прошло, наступил 21 век, все стали использовать UTF-8, но в стандарте диграфы остались. И что самое отвратительное, во многих легаси проектах до сих пор встречаются. Так что не пугайтесь, увидев такое в старых исходниках

Теги:
Хабы:
Всего голосов 53: ↑17 и ↓36-19
Комментарии29

Публикации

Истории

Работа

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

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

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань