Просмотр полной версии : Триграфы в C/C++
Триграфы это специальные тройки символов вида ??x, которые заменяют некоторые спецсимволы
Не помню кто мне кидал примерчик:
int i;
// cколько раз выведется hi в stdout??/
for( i=0; i<10; i++ )
printf("hi\n");
на самом деле ??/ означает символ \ поэтому цикл for попадает в продолжение комментария и hi выведется один раз.
Другой пример:
??=define HELLO аналогично #define HELLO (??= заменяется на #)
Great: тема выделилась из "[c/c++] Новичкам: задаем вопросы"
в этом примере цикл не попадает в комментарии
Не помню кто мне кидал примерчик: А я помню ))
P.s. кто юзает триграфы - тот говнюк.
в этом примере цикл не попадает в комментарии
Скомпилируй
Скомпилируй
scrat@scrat:~$ gcc -o omg omg.c
omg.c:5:56: warning: trigraph ??/ ignored, use -trigraphs to enable
scrat@scrat:~$ ./omg
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
scrat@scrat:~$ gcc -trigraphs -o omg omg.c
scrat@scrat:~$ ./omg
hi
:D
смотри :)
http://img519.imageshack.us/img519/6930/53716150sa9.jpg
просто кроме Ms Vc++ существуют и другие компиляторы =\
http://img519.imageshack.us/img519/6930/53716150sa9.jpg выкинь этот компилер.
scrat, gcc выдает ворнинг, все правильно.
tcl, че это за чудо природы?
nerezus, +1
gcc тоже выкинуть? Зачем? gcc про триграфы знает.
Если вдруг кому понадобяться:
Диграфы:
<% {
%> }
<: [
:> ]
%: #
%:%: ##
Триграфы:
??= #
??( [
??< {
??/ \
??) ]
??> }
??' ^
??! |
??- ~
??? ?
а с диаграфами ещё больше компиляторов не работают и что теперь, выкинуть их всех?
scrat, gcc выдает ворнинг, все правильно.
tcl, че это за чудо природы?
nerezus, +1
всё зависит от способа компеляции.но если учитывать триграф то цикл попадает в комментарий и _Great_ прав.
dmc это компилер c и c++ от Digital Mars (http://www.digitalmars.com/download/freecompiler.html) по ходу компилер реал корявый!
Не все компиляторы соблюдают стандарт и практически у всех (если, вообще не у всех) компиляторов есть свои косяки.
Msvc в принципе далек от слова "стандарт", однако триграфы он понимает :)
Digital Mars У них раньше была таблица сравнения их языка D с существующими.
После прочтения решил никогда не юзать язык D, т.к. такой брехни, как в таблице, никогда не видел.
Эта таблица которая сравнивала D и С и яву? Которая была на ксакепе? :) (и которой не было на официальном сайте)
PS http://img518.imageshack.us/img518/6048/57665526nb5.jpg
PPS я думаю вы с грейтом знаете, для чего на самом деле нужны триграфы. На*** тогда писать про вещи, вероятность встречи с которыми практически равна нулю? Конечно только если вы не участвуете в соревнованиях типа "кто напишет самый нечитабельный код"
pps я думаю вы с грейтом знаете, для чего на самом деле нужны триграфы. На*** тогда писать про вещи, вероятность встречи с которыми практически равна нулю?
Чувак спросил что это такое ) А так.. я смысла в них не вижу. Только чтобы оставлять намеренные "ошибки" в коде сплоитов например (защита)
на самом деле они были нужны на древних терминалах, где не хватало нужных символов.
Ну а сейчас необходимость уже отпала.
Ладно, закрываю тему. Обсудили и хватит) Что это, зачем нужно и с чем его едят.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot