c/c++语言开发共享mingw printf尺寸规格字符h

Visual Studio有一个大小和距离规格图表 ,我可以这样做,使用h前缀指定单字节字符串,无论printf还是wprintf:

int main() { char test[]= "abc"; _tprintf(_T("%hsn"),test); } 

但是,如果我使用mingw gcc和-Wall编译相同的内容,我会得到以下警告:
warning: format '%hs' expects type 'short int *', but argument 2 has type 'char *'

我在做什么是一种可接受的方式来在mingw中指定单字节字符串?

谢谢

编辑 – 此问题已在下面详细解答。 简短的回答是肯定的,这是在mingw中指定单字节字符串的可接受方式,并且可以忽略警告。

    您还会注意到Visual Studio文档说:

    注意:当与char类型的数据一起使用时,h和l前缀是Microsoft扩展。

    我认为这更准确地说,“当与'c''s'格式说明符(大写或小写)一起使用时”。

    意识到GCC编译器确实不知道Microsoft的运行时如何处理printf()格式字符串,而GCC给出的警告是针对它通常使用的运行时量身定制的。 使用MinGW构建时,使用随Windows提供的Microsoft C运行时msvcrt.dll (尽管MinGW确实为某些库函数提供了替换或包装)。 因此,编译器认为printf()格式字符串和提供给printf()的参数以及运行时实际执行的操作之间有时会产生混淆。

    例如,直到最近,在整数转换上使用ll格式化64位int类型在MinGW中无法正常工作。 我不确定是否在MinGW支持函数中发生’修复’,或者是否更新了msvcrt.dll以支持ll修饰符(我怀疑msvcrt.dll已更新 – 我必须检查…) 。

    无论如何,这归结为无论GCC提供有关printf()格式字符串的警告,您很可能需要将MSVC文档用于格式字符串,因为它是MinGW将使用的MS运行时。 如果您不喜欢生成的warngin,可能需要考虑在MinGW构建脚本中添加-Wno-format选项。

      以上就是c/c++开发分享mingw printf尺寸规格字符h相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/550054.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐