Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
hoggy
Нарушитель
Эксперт С++
7087 / 3130 / 648
Регистрация: 15.11.2014
Сообщений: 7,209
Завершенные тесты: 1
1

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

21.02.2015, 18:30. Просмотров 987. Ответов 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
Ответы с готовыми решениями:

Как найти и устранить утечку памяти
Программа в ходе ее выполнения разрастается. Я не могу найти где именно...

Как устранить ошибку Линковщика?
1>LINK : fatal error LNK1104: не удается открыть файл...

Как устранить мерцание объекта?
Здравствуйте. Возникла проблема с мерцанием. Пытался сделать двойную...

Подскажите как устранить ошибку С++, OpenGl
Вот код: #include <windows.h> #include <gl\gl.h> #include...

Что такое триграф?
Что такое триграф?

5
Nick Alte
Эксперт С++
1647 / 1019 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
21.02.2015, 19:04 2
Цитата Сообщение от hoggy Посмотреть сообщение
При включенных триграфах, как можно переписать литерную константу так,
что бы не нарываться на них?
Можно воспользоваться обычным поведением escape-последовательностей.
Цитата Сообщение от hoggy Посмотреть сообщение
const str mask = "*?m.\?\?/";
1
hoggy
Нарушитель
Эксперт С++
7087 / 3130 / 648
Регистрация: 15.11.2014
Сообщений: 7,209
Завершенные тесты: 1
21.02.2015, 19:16  [ТС] 3
Цитата Сообщение от Nick Alte Посмотреть сообщение
Можно воспользоваться обычным поведением escape-последовательностей.
Спасибо. Это сработало.

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

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

Никак не пойму, почему они вообще активированы.
Неужели mingw их по дефолту включает?
Потому что сам я явным образом их точно нигде не включал...
0
Nick Alte
Эксперт С++
1647 / 1019 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
21.02.2015, 19:58 4
Лучший ответ Сообщение было отмечено hoggy как решение

Решение

Из документации 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
Нарушитель
Эксперт С++
7087 / 3130 / 648
Регистрация: 15.11.2014
Сообщений: 7,209
Завершенные тесты: 1
21.02.2015, 20:00  [ТС] 5
Цитата Сообщение от Nick Alte Посмотреть сообщение
Опции -ansi и -std, устанавливающие строгое соответствие со стандартом ISO C, включают и -trigraphs.
как выключить?
ну или как подключить с++1y не врубая триграфы?
0
Nick Alte
Эксперт С++
1647 / 1019 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
21.02.2015, 20:09 6
Лучший ответ Сообщение было отмечено hoggy как решение

Решение

Если строгое соответствие стандарту - не самоцель, можно включить -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

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

Графический баг, как устранить. cout
Проблема с выводом информации. Как можно устранить данную проблему, что бы все...

Как устранить дублирование вывода массива?
дублируется массив выбирая: "If you want to have data automatically, Enter 2 "...


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

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

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