C ++支持长度说明符

时间:2015-08-14 11:40:31

标签: c++ c formatting char printf

cplusplus.com reference for printf中,我看到了“长度”格式的规范,但它包含了注释:

  

黄色行表示C99引入的说明符和子说明符。   有关,请参阅<cinttypes>   扩展类型的说明符。

我的问题是hh长度格式。这是一个“黄色”排。使用hh进行格式设置在Visual Studio中的行为与预期一致,但我想知道是否因为Visual Studio也是C编译器或者因为C ++实际支持hh

2 个答案:

答案 0 :(得分:5)

C ++标准使用C90作为规范参考,直到C ++ 11,因此只有C ++ 11支持C99功能。虽然编译器可以自由地在C ++ 11之外支持它们作为扩展。我怀疑这只适用于更新版本的Visual Studio given their relatively recent drive to support C99cremno indicates that it is supported since 2015

如果我们转到C ++ 11草案标准部分1.2规范性引用[intro.refs],它会说:

  

以下参考文件是必不可少的   本文件的应用。凡是注日期的引用文件,仅限版本   引用适用。凡是不注日期的引用文件,其最新版本为   引用文件(包括任何修正案)适用。

并包括:

  
      
  • ISO / IEC 9899:1999,编程语言 - C
  •   

并且还说:

  

ISO / IEC 9899:1999第7章和第7章中描述的库   ISO / IEC 9899:1999 / Cor.1:2001和ISO / IEC第7条   9899:1999 / Cor.2:2003在下文中称为C标准   库。 1

在C ++ 11之前,这是:

  
      
  • ISO / IEC 9899:1990,编程语言 - C
  •   

如果我们使用-std=c++03 -pedantic在gcc中尝试an example,则会发出警告:

  

警告:ISO C ++ 98不支持'hh'gnu_printf长度修饰符[-Wformat =]

答案 1 :(得分:3)

如果你继续阅读页面

  

此处列出的内容受最新C和C ++标准(均于2011年发布)支持,但黄色版本在C99中引入(自C ++ 11以来仅 C ++实现所需)< / p>

因此,如果您使用Visual Studio 2013或更高版本,则可以访问(大多数)C ++ 11功能。