从 C++14 开始,你可以像这样编写文字:
1'000'000
0b1111'1111
也就是说,您可以在数字之间使用单引号以使其更具可读性。
然而通常的 C/C++ 列表样式开始将单引号解释为字符/字符串的开头(如果有则以下一个数字分隔符结尾,如果没有则从不结尾)。
例如:
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{%
language=C++,
stringstyle=\color{red},
}
\begin{document}
\begin{lstlisting}
main()
{
int i = 1'000'000;
int j = 0b111'111;
}
\end{lstlisting}
\end{document}
生成:
我该如何修复它?
答案1
您可以禁用'
作为字符串分隔符(这在 C++ 中甚至是错误的),但同时您会失去字符文字的突出显示。
\documentclass{article}
\usepackage{xcolor}
\usepackage{upquote}
\usepackage{listings}
\lstset{%
language=C++,
stringstyle=\color{red},
deletestring=[b]{'}
}
\begin{document}
\begin{lstlisting}
main()
{
int i = 1'000'000;
int j = 0b111'111;
char c = 'a';
std::string s = "Hello world!\n";
}
\end{lstlisting}
\end{document}