PDA

Просмотр полной версии : Триграфы в C/C++


_Great_
19.06.2007, 22:50
Триграфы это специальные тройки символов вида ??x, которые заменяют некоторые спецсимволы
Не помню кто мне кидал примерчик:

int i;
// cколько раз выведется hi в stdout??/
for( i=0; i<10; i++ )
printf("hi\n");

на самом деле ??/ означает символ \ поэтому цикл for попадает в продолжение комментария и hi выведется один раз.

Другой пример:
??=define HELLO аналогично #define HELLO (??= заменяется на #)

Great: тема выделилась из "[c/c++] Новичкам: задаем вопросы"

tcl
19.06.2007, 23:00
в этом примере цикл не попадает в комментарии

nerezus
19.06.2007, 23:26
Не помню кто мне кидал примерчик: А я помню ))

P.s. кто юзает триграфы - тот говнюк.

_Great_
19.06.2007, 23:35
в этом примере цикл не попадает в комментарии
Скомпилируй

scrat
20.06.2007, 01:18
Скомпилируй
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

tcl
20.06.2007, 01:28
смотри :)
http://img519.imageshack.us/img519/6930/53716150sa9.jpg

A110ut
20.06.2007, 01:41
просто кроме Ms Vc++ существуют и другие компиляторы =\

nerezus
20.06.2007, 08:39
http://img519.imageshack.us/img519/6930/53716150sa9.jpg выкинь этот компилер.

_Great_
20.06.2007, 10:31
scrat, gcc выдает ворнинг, все правильно.
tcl, че это за чудо природы?
nerezus, +1

tcl
20.06.2007, 11:27
gcc тоже выкинуть?

nerezus
20.06.2007, 11:33
gcc тоже выкинуть? Зачем? gcc про триграфы знает.

Prod
20.06.2007, 11:57
Если вдруг кому понадобяться:

Диграфы:

<% {
%> }
<: [
:> ]
%: #
%:%: ##

Триграфы:

??= #
??( [
??< {
??/ \
??) ]
??> }
??' ^
??! |
??- ~
??? ?

tcl
20.06.2007, 12:00
а с диаграфами ещё больше компиляторов не работают и что теперь, выкинуть их всех?

scrat
20.06.2007, 12:42
scrat, gcc выдает ворнинг, все правильно.
tcl, че это за чудо природы?
nerezus, +1
всё зависит от способа компеляции.но если учитывать триграф то цикл попадает в комментарий и _Great_ прав.
dmc это компилер c и c++ от Digital Mars (http://www.digitalmars.com/download/freecompiler.html) по ходу компилер реал корявый!

_Great_
20.06.2007, 12:48
Не все компиляторы соблюдают стандарт и практически у всех (если, вообще не у всех) компиляторов есть свои косяки.
Msvc в принципе далек от слова "стандарт", однако триграфы он понимает :)

nerezus
20.06.2007, 13:00
Digital Mars У них раньше была таблица сравнения их языка D с существующими.
После прочтения решил никогда не юзать язык D, т.к. такой брехни, как в таблице, никогда не видел.

tcl
20.06.2007, 13:19
Эта таблица которая сравнивала D и С и яву? Которая была на ксакепе? :) (и которой не было на официальном сайте)
PS http://img518.imageshack.us/img518/6048/57665526nb5.jpg
PPS я думаю вы с грейтом знаете, для чего на самом деле нужны триграфы. На*** тогда писать про вещи, вероятность встречи с которыми практически равна нулю? Конечно только если вы не участвуете в соревнованиях типа "кто напишет самый нечитабельный код"

_Great_
20.06.2007, 13:22
pps я думаю вы с грейтом знаете, для чего на самом деле нужны триграфы. На*** тогда писать про вещи, вероятность встречи с которыми практически равна нулю?
Чувак спросил что это такое ) А так.. я смысла в них не вижу. Только чтобы оставлять намеренные "ошибки" в коде сплоитов например (защита)

tcl
20.06.2007, 13:26
на самом деле они были нужны на древних терминалах, где не хватало нужных символов.

_Great_
20.06.2007, 13:29
Ну а сейчас необходимость уже отпала.

Ладно, закрываю тему. Обсудили и хватит) Что это, зачем нужно и с чем его едят.