Избегайте повторяющихся вопросительных знаков

      Комментарии к записи Избегайте повторяющихся вопросительных знаков отключены

Главная Форумы Программирование Программирование на С++ Заметки о С++ Замечания о С++ Избегайте повторяющихся вопросительных знаков

Помечено: ,

В этой теме 1 ответ, 2 участника, последнее обновление  daniil159x 3 мес. назад.

  • Автор
    Сообщения
  • #3961

    Два идущих подряд вопросительных знака означают начало триграфа. Стандарт C99 (ISO/IEC 9899:1999) допускает существование следующих триграфов:

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

    Стандарт безопасного программирования CERT напоминает, что данные последовательности не должны использоваться не по назначению. Даже их появление в комментариях и строках иногда может стать причиной некорректной работы (или компиляции) программы.

    Что бы вы поняли о чем речь, приведу небольшой пример:

    printf("Уверены, что x = %d??!", x);
    При компиляции последовательность ??! заменится на один символ |. Хотя, компилятор может сообщить об этом:

    В примерах стандарта есть совсем уж невероятная ситуация, когда Вы хотите напечатать три повторяющихся знака вопроса, но в спешке печатаете ??/, что интерпретируется как символ \. А он может экранировать любой другой символ в том числе и перевод строки:

    // what is the value of a now????????????/
    a++;

    Автор статьи — МУХ.

  • #3967

    daniil159x
    Участник

    Добавлю, что в новом стандарте C++17 триграфы будут удалены.
    cppreference

    isocpp
    Предложение

Для ответа в этой теме необходимо авторизоваться.