Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
1

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

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

Author24 — интернет-сервис помощи студентам
Доброго времени суток.

Сборка 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2015, 18:30
Ответы с готовыми решениями:

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

Можно ли в матрице M и N обозначить как переменные или только как константы?
Дан массив MxN. Можно ли в matrix:array of integer; M и N обозначить как переменные или только как...

Как отключить брандмауэр или отключить фаервол
Я отключаю защитника Windows server 2012 . Отключаю фаервол. Расшариваю папки. В свойствах сети...

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

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

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

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

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

Решение

Если строгое соответствие стандарту - не самоцель, можно включить -std=gnu++14 (не подразумевающий строгого соответствия ISO, то бишь включающий гнутые расширения) и подавить предупреждения через -Wno-trigraphs
1
21.02.2015, 20:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2015, 20:09
Помогаю со студенческими работами здесь

как устранить ошибку?
Среда Visual Basic STUDIO’2010 Professional как устранить ошибку? SubFormForEnter.Label11.Text...

Как устранить ошибку
Переписываю программу из ворда обратно в маткад. Вроде всё норм, но с ошибкой. Один масив 15*33...

как устранить ошибку
вообщем надо было написать программу которая должна выяснить, встречается ли в данной строке...

Как устранить ошибку?
Делаю окошко с паролем и тут вот такая ошибка вылазиет. И так, и эдак пытаюсь. Как устранить ее? ...

Как устранить ошибку?!
Файл с изображением ошибки вложен!

BSOD как устранить?
Доброго времени суток! В общем, принесли комп, какие то специалисты поглядели, сказали системная...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru