生成:s:在列表包中支持 C++14 数字分隔符

生成:s:在列表包中支持 C++14 数字分隔符

从 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}

在此处输入图片描述

相关内容