2014-01-20 2 views
4

У меня есть следующая программа, которая печатает зеленый текст на терминал:Как игнорировать конкретное предупреждение gcc, которое [включено по умолчанию]?

#include <iostream> 
#include <string> 

//returns a colored string for terminal output streams 
std::string colorize_forground(std::string const& message, int const& background) { 
    return std::string("\e[38;5;" + std::to_string(background) + "m" + message + "\x1b[0m"); 
} 

int main() { 
    std::cout << colorize_forground("hello world in green", 106) << '\n'; 
} 

Однако, когда я скомпилировать программу с помощью следующего флажка,

г ++ -std = C++ 1y -pedantic -o главный prob.cpp

Я получаю следующее предупреждение:

main.cpp: In function ‘std::string colorize_forground(const string&, const int&)’: 
main.cpp:6:21: warning: non-ISO-standard escape sequence, '\e' [enabled by default] 
    return std::string("\e[38;5;" + std::to_string(background) + "m" + message + "\x1b[0m"); 

Как продолжить использование -pedantic, но игнорировать предупреждение для этой конкретной функции?

Я пытался использовать gcc's Diagnostic Pragmas, чтобы игнорировать это предупреждение об аварийной последовательности. Я завернул функцию следующим образом, но она все еще вызывает предупреждение.

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-pedantic" 
std::string colorize_forground(std::string const& message, int const& background) { 
    return std::string("\e[38;5;" + std::to_string(background) + "m" + message + "\x1b[0m"); 
} 
#pragma GCC diagnostic pop 
+6

Это не решает общую проблему, но вы можете использовать '\ x1b' в вашем конкретном случае вместо' \ e', как вы уже делаете второй раз, когда вам это нужно. – zneak

ответ

0

Все доступные флаги и их значения можно увидеть на сайте:

https://gcc.gnu.org/onlinedocs/gcc-4.4.6/gcc/Warning-Options.html

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

Как продолжить использование -pedantic, но игнорировать предупреждение для этой конкретной функции?

Флаг -pedandic покажет все ошибки и предупреждения, контролируемые этим флагом. Поскольку вы беспокоитесь о предупреждении, вы можете подумать об использовании -pedantic-errors, который будет производить ошибки, а не предупреждения. Это не точно, о чем вы просили, но этого может быть достаточно.

Существует также этот флаг, который может или не может относиться к вам: -Wno-pedantic-ms-format (цели MinGW только)

+0

Зачем ссылаться на руководство по GCC 4.4, которое является древним и не показывает всех вариантов версии OP? –

+0

@JonathanWakely Эта ссылка - это то, что мне было удобно. Как я уже сказал, «** Измените ссылку на версию gcc по вашему выбору. **« Также, что такое версия OP? Я не вижу, чтобы эта информация упоминалась где угодно. –

+0

Он поддерживает '-std = C++ 1y', поэтому должен быть не менее 4.8.0 –