Как скрыть параметры шаблона по умолчанию в сообщениях об ошибках gcc?
Чтение сообщений об ошибках, генерируемых g++, часто является болью, потому что gcc расширяет имена, например
std::ostream
в моем коде в гораздо более длинную форму, например
std::basic_ostream<char, std::char_traits<char> >
в сообщениях об ошибках. Аналогично, gcc расширяет std::string
на std::basic_string<char>
. Я не вижу никакой пользы для таких расширений, и это только мешает мне связывать сообщения об ошибках и сайт ошибки.
Мне было интересно, можно ли gcc отключить это поведение расширения и использовать более короткие имена с параметрами шаблона по умолчанию as-is?
Здесь есть связанный с этим вопрос , который, похоже, вообще не показывает длинное расширенное имя. Я спрашиваю здесь, можно ли просто показать короткое имя, как я использовал в коде. Ответ там также не решает проблему.
Ответы
Ответ 1
Нет флага компилятора для уменьшения или изменения сообщений об ошибках и связанных типов/шаблонов.
- gcc поддержка цвета с gcc 4.9 с
-fdiagnostics-color={auto, always, never}
. См. Документацию здесь.
Существует несколько сторонних инструментов, которые помогут вам расшифровать сообщения об ошибках:
- GCCFilter для раскраски и упрощения сообщений об ошибках (Perl script)
- ColorGCC в том же духе (Perl script), git .
- STLFilt: фильтр сообщений, предназначенный для диагностики, связанной с STL. Обратите внимание, что он больше не поддерживается и не развивается.
Также как (очень хорошая) альтернатива, компилятор clang очень, очень хорош в диагностике и сообщениях об ошибках.
Ответ 2
Я сомневаюсь, что вы можете прямо сейчас. Вариантом закрытия является fno-pretty-templates
, который действует следующим образом:
-fno-довольно-шаблоны
Когда сообщение об ошибке относится к специализации шаблона функции, компилятор обычно печатает подпись шаблон, за которым следуют аргументы шаблона и любые typedefs или typenames в сигнатуре (например, void f (T) [с T = int], а не void f (int)), чтобы он очистил какой шаблон. Когда сообщение об ошибке относится к специализации шаблона класса, компилятор исключает любые аргументы шаблона, соответствующие шаблону по умолчанию аргументы для этого шаблона. Если это одно из этих действий сложнее понять сообщение об ошибке, а не проще, вы можете использовать -fno-pretty-templates, чтобы отключить их.