如何忽略[默认启用]的特定gcc警告?

时间:2014-01-20 02:08:59

标签: c++ gcc c++11 warnings pragma

我有以下程序将绿色文本打印到终端:

#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';
}

但是,当我使用以下警告标志编译程序时,

  

g ++ -std = c ++ 1y -pedantic -o main 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

1 个答案:

答案 0 :(得分: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目标)