c/c++语言开发共享当char *是typedef并通过struct访问时,为什么编译器会在char *和printf的转换说明符“s”之间看到不匹配?

为什么编译器会在下面的printf中抱怨参数类型“char”和转换说明符“s”不匹配?

#include  #include  typedef char * STR; // causes problems in printf below int main(void) { struct MyStruct { STR str; }; struct MyStruct ms = {"some text"}; printf("%sn", ms.str); return (EXIT_SUCCESS); } 

删除typedef时,编译器没有关于相同代码的投诉:

 #include  #include  //typedef char * STR; // runs fine without typedef int main(void) { struct MyStruct { char * str; //STR str; }; struct MyStruct ms = {"some text"}; printf("%sn", ms.str); return (EXIT_SUCCESS); } 

笔记:

    在作为这个问题的评论的回声室中,似乎那些参与者和OP已经达成共识,这是NetBeans的错误。

    我无法在Cygwin x64上重现您的问题。 此外,“不匹配参数类型”char“和转换说明符”s“”看起来不像GCC警告,可能是Netbeans问题。 另见这个类似的Netbeans错误报告 – RustyX 5月26日18:51

    @BloodyPeasant gcc没有显示“与参数类型不匹配”的错误消息“char”和转换说明符“s”。 ,可能是NetBeans显示错误消息而不是gcc,在这种情况下NetBeans是错误的,并且在其错误消息中也有相当差的英语语法。 – 5月26日19:33

    @nos Ha,这么差的语法就是一个标志,它是一个NetBeans问题……看看NetBeans的内幕,看来你和RustyX是正确的,这只是一个IDE故障。 谢谢,所有。 – 血腥农民5月27日凌晨2点01分

    ……所以你的问题需要纠正:

    为什么编译器 [NetBeans]在下面的printf中抱怨不匹配的参数类型“char”和转换说明符“s”?

    编写NetBeans的人是能够犯错误的人,而这个错误信息是其中一个错误的表现,我们通常称之为“错误”,“故障”或“软件错误”的症状。

      以上就是c/c++开发分享当char *是typedef并通过struct访问时,为什么编译器会在char *和printf的转换说明符“s”之间看到不匹配?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

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

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

      精彩推荐