![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Andrew Selivanov |
![]() ![]()
Сообщение
#1
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
Триграфы (trigraphs) это последовательности из трех символов ( из них два первых символа это знаки вопроса ) которые компилятор заменяет на соответствующие символы.
??= # ??( [ ??/ \ ??) ] ??’ ^ ??< { ??! | ??> } ??- ~ Например результат выполнения следующего кода может быть не совсем таким, как ожидалось (в зависимости от компилятора): printf( "Hello world??!\n" ); на консоли: Hello world| Для того, чтобы все стало хорошо код нужно подправить следующим образом: printf( "Hello world?\?!\n" ); И для сомневающихся предлагается такая программка (все собирается и работает): ??=include <iostream> using namespace std; int main() ??< cout << "??/nHello World??/n" << endl; return 0; ??> По умолчанию триграфы отключены в GCC, параметр для включения: -ansi -trigraph Andrew Selivanov (at) gmail.com для crossplatform.ru |
|
|
ViGOur |
![]()
Сообщение
#2
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Мда, век живи, век учись, не знал об этом...
![]() А какая смысловая нагрузка в них непонятно! |
|
|
Andrew Selivanov |
![]()
Сообщение
#3
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
deninok |
![]()
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 28.12.2007 Пользователь №: 58 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(ViGOur) А какая смысловая нагрузка в них непонятно! Смысловая нагрузка такая, что на клавиатуре пользователя может не быть некоторых привычных для нас символов. Конечно, для подавляющего большинства пользователей триграфы совершенно не нужны... |
|
|
deninok |
![]()
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 28.12.2007 Пользователь №: 58 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(Andrew Selivanov) Вот перестанет работать что-нибудь из за такой фигни, будешь неделю втыкать в чем проблема ![]() О да, это уж точно! Могут возникнуть очень серьезные проблемы. Пример:
Так вот, в этом совершенно простом коде некое очень важное действие с переменной b НЕ произойдет! Почему, спросите вы? Обратите внимание на три последних знака в первом комментарии (в котором нам почему-то понадобилось указать много знаков вопроса): "??/" Эти три знака образуют триграф, который преобразуется к знаку "\", соединяющий строки (конкатенация)! Таким образом, комментарий с вопросительными знаками будет объединен со строкой, в которой должно произойти очень важное действие. И важная строка будет также закомментированной. Я проверял на компиляторе g++, это действительно так! Причем ваш редактор (который, скорее всего, показывает закомментированный текст определенным цветом) в данной ситуации НЕ покажет строку с очень важным действием как закомментаренную. И компилятор не ругнется. Впрочем, это относится не ко всем компиляторам, но g++ точно не ругнется, ибо он не просматривает содержимое комментариев, считая это бесполезным. Но в приведенном мною примере такой подход приведет к ошибке. Совет один: не допускайте триграфов в комментариях. Да и вообще избегайте их. Сообщение отредактировал deninok - 28.12.2007, 23:52 |
|
|
ViGOur |
![]()
Сообщение
#6
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Мда, а потом попробуй найди из-за чего у тебя этот код не работает, сума сойдешь!!!
![]() |
|
|
terrible |
![]()
Сообщение
#7
|
Студент ![]() Группа: Участник Сообщений: 44 Регистрация: 16.10.2007 Пользователь №: 13 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Значит не стоит включать их поддержку, чтобы небыло таких проблем!
![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
А ведь важное замечание у deninok, в голову бы не пришло, хотя про триграфы читал, еще у Ричи.
|
|
|
rich |
![]()
Сообщение
#9
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 123 Регистрация: 1.3.2008 Пользователь №: 109 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 11.3.2025, 17:33 |