C++支持长度说明符

Jon*_*Mee 7 c c++ formatting printf char

cplusplus.com参考printf我看到了一个"长度"格式的规范,但它包括注释:

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

我的问题是关于hh长度格式.这是一个"黄色"排.格式化与hhVisual Studio中的预期行为,但我想知道是否因为Visual Studio也是C编译器或因为hhC++实际支持?

Sha*_*our 5

C++标准使用C90作为规范参考,直到C++ 11,因此只有C++ 11支持C99功能.虽然编译器可以自由地在C++ 11之外支持它们作为扩展.我怀疑这只适用于最新版本的Visual Studio,因为他们相对较近的驱动器支持C99cremno表明它自2015年以来一直受支持.

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

以下参考文件对于本文件的应用是必不可少的.凡是注日期的引用文件,仅引用的版本适用.凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本标准.

包括:

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

并且还说:

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

在C++ 11之前,这是:

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

如果我们在gcc中尝试使用它的示例-std=c++03 -pedantic警告:

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