У меня есть следующая программа, которая печатает зеленый текст на терминал:Как игнорировать конкретное предупреждение 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
Это не решает общую проблему, но вы можете использовать '\ x1b' в вашем конкретном случае вместо' \ e', как вы уже делаете второй раз, когда вам это нужно. – zneak