С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
hoggy
6720 / 2905 / 499
Регистрация: 15.11.2014
Сообщений: 6,546
Завершенные тесты: 1
#1

[trigraph] Как отключить? Как устранить триграф из литерной константы? - C++

21.02.2015, 18:30. Просмотров 389. Ответов 5
Метки нет (Все метки)

Доброго времени суток.

Сборка Debug при помощи mingw482_32.
Возникла проблема с триграфами.

Вообще то, я всегда думал, что триграфы по дефолту отключены.
Но у меня они почему то оказались включенными.

В связи с этим два вопроса:
1. Каким волшебным ключиком компилятора деактивировать?

2. При включенных триграфах, как можно переписать литерную константу так,
что бы не нарываться на них?

Код:

C++
1
2
3
4
5
6
//кусочек из юнит-тестов
...
const str mask = "*?m.??/";
const str re = os::OptimizeMask(mask);
EXPECT_EQ("*m.??", re);
...
mingw ругается:

предупреждение: trigraph ??/ converted to \ [-Wtrigraphs]
const str mask = "*?m.??/";
Ключи компиляции:

Код
if(${CMAKE_GENERATOR} MATCHES "Unix Makefiles"  OR ${CMAKE_GENERATOR} MATCHES "MinGW Makefiles")
    set(CMAKE_MAKE_PROGRAM      "${CMAKE_MAKE_PROGRAM} -j{PROCESSOR_COUNT}")
    set(CMAKE_CXX_FLAGS         "${CMAKE_CXX_FLAGS}         -std=c++11 -fopenmp"     )
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11 -fopenmp -O3" )
    set(CMAKE_CXX_FLAGS_DEBUG   "${CMAKE_CXX_FLAGS_DEBUG}   -std=c++11 -fopenmp -O0 -g3 -pedantic -Wall -Weffc++ -Wextra -Woverloaded-virtual -Wctor-dtor-privacy -Wnon-virtual-dtor -Wold-style-cast -Wconversion -Wsign-conversion -Winit-self -Wunreachable-code")
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2015, 18:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос [trigraph] Как отключить? Как устранить триграф из литерной константы? (C++):

Как найти и устранить утечку памяти - C++ Builder
Программа в ходе ее выполнения разрастается. Я не могу найти где именно происходит утечка. В Unit1 обрабатываются события двух кнопок. Одна...

Как устранить мерцание объекта? - C++ WinAPI
Здравствуйте. Возникла проблема с мерцанием. Пытался сделать двойную буферизацию, но скорей всего что-то неправильно сделал. Код без...

Подскажите как устранить ошибку С++, OpenGl - C++ WinAPI
Вот код: #include <windows.h> #include <gl\gl.h> #include <gl\glu.h> # include <gl\glaux.h> static HGLRC hRC; ...

Что такое триграф? - C++
Что такое триграф?

Как устранить мерцание в консоли? - C++
Здравствуйте. Написал несколько классов, рисующих в памяти кадр. Вывожу при помощи cout символами псевдографики, перед выводом следующего...

Подскажите как устранить ошибку С++, OpenGl - C++
Вот код: #include <windows.h> #include <gl\gl.h> #include <gl\glu.h> # include <gl\glaux.h> static HGLRC hRC; static...

5
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
21.02.2015, 19:04 #2
Цитата Сообщение от hoggy Посмотреть сообщение
При включенных триграфах, как можно переписать литерную константу так,
что бы не нарываться на них?
Можно воспользоваться обычным поведением escape-последовательностей.
Цитата Сообщение от hoggy Посмотреть сообщение
const str mask = "*?m.\?\?/";
1
hoggy
6720 / 2905 / 499
Регистрация: 15.11.2014
Сообщений: 6,546
Завершенные тесты: 1
21.02.2015, 19:16  [ТС] #3
Цитата Сообщение от Nick Alte Посмотреть сообщение
Можно воспользоваться обычным поведением escape-последовательностей.
Спасибо. Это сработало.

Остался один вопрос: как вообще их отключить?
Как то не очень хочется уродовать строки из-за этой пакости.

-------------

Никак не пойму, почему они вообще активированы.
Неужели mingw их по дефолту включает?
Потому что сам я явным образом их точно нигде не включал...
0
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
21.02.2015, 19:58 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Из документации GCC:
-trigraphs
Support ISO C trigraphs. The -ansi option (and -std options for strict ISO C conformance) implies -trigraphs.
Опции -ansi и -std, устанавливающие строгое соответствие со стандартом ISO C, включают и -trigraphs.
1
hoggy
6720 / 2905 / 499
Регистрация: 15.11.2014
Сообщений: 6,546
Завершенные тесты: 1
21.02.2015, 20:00  [ТС] #5
Цитата Сообщение от Nick Alte Посмотреть сообщение
Опции -ansi и -std, устанавливающие строгое соответствие со стандартом ISO C, включают и -trigraphs.
как выключить?
ну или как подключить с++1y не врубая триграфы?
0
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
21.02.2015, 20:09 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если строгое соответствие стандарту - не самоцель, можно включить -std=gnu++14 (не подразумевающий строгого соответствия ISO, то бишь включающий гнутые расширения) и подавить предупреждения через -Wno-trigraphs
1
21.02.2015, 20:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2015, 20:09
Привет! Вот еще темы с ответами:

Как устранить дублирование вывода массива? - C++
дублируется массив выбирая: "If you want to have data automatically, Enter 2 " (Генерация чисел ) Как исправить? #include...

Как устранить эту ошибку ри компиляции? - C++
1>LINK : fatal error LNK1104: не удается открыть файл "OLDNAMES.lib"

Обнуления значения в классе(как устранить) - C++
значение counter обнуляется, как устранить такую проблему? #include "stdafx.h" #include <iostream> #include <ctime> using...

В окне кода текст переносится как попало. Как это устранить? - Visual Studio
Можно ли настроить VS.Net так, чтобы код не переносился как попало, даже если не вмещается в окне? Страшно неудобно работать. Если можно -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.