在cplusplus.com reference for printf中,我看到了“长度”格式的规范,但它包含了注释:
黄色行表示C99引入的说明符和子说明符。 有关,请参阅
<cinttypes>
扩展类型的说明符。
我的问题是hh
长度格式。这是一个“黄色”排。使用hh
进行格式设置在Visual Studio中的行为与预期一致,但我想知道是否因为Visual Studio也是C编译器或者因为C ++实际支持hh
?
答案 0 :(得分:5)
C ++标准使用C90作为规范参考,直到C ++ 11,因此只有C ++ 11支持C99功能。虽然编译器可以自由地在C ++ 11之外支持它们作为扩展。我怀疑这只适用于更新版本的Visual Studio given their relatively recent drive to support C99和cremno 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功能。