c/c++语言开发共享_Bool的printf转换说明符?

使用printf() ,我可以将%hhu用于unsigned char ,将%hi用于short int ,将%zu用于size_t ,将%tx用于ptrdiff_t等。

我对_Bool使用什么转换格式说明符? 标准中是否存在一个?

或者我必须像这样投射:

 _Bool foo = 1; printf("foo: %in", (int)foo); 

    _Bool类型没有特定的转换长度修饰符。

    _Bool是一个无符号整数类型,足以存储值01 。 你可以这样打印_Bool

     _Bool b = 1; printf("%dn", b); 

    由于整数提升规则, _Bool保证提升为int

    直到C99,bool不是标准C的一部分,因此不存在作为printf修饰符。 C99,定义_Bool(你正在使用)是一个整数,因此你应该把它作为一个整数来展示(至少从机器的角度来看)。 或者,您可以执行以下操作:

     printf("%d",foo?1:0); 

    正如您在对@Jack的评论中所述,“6.3.1.1p1表示_Bool的转换等级小于所有其他标准整数类型的等级”。

    在对printf的调用中, charshort将被提升并作为int (或unsigned int )传递给堆栈,因此我认为使用%d作为格式说明符会没问题。 这也意味着您不需要显式强制转换为int ,因为这将自动发生。

    唯一可能的问题是编译器如何表示_Bool ,它可能是实现定义的,并且可能因编译器而异。 我看到两种可能的实现 – 0和1或0和-1。

    为了获得最佳的便携性,请关注@ user325181的答案,并使用三元组在两个选项之间进行选择。 整数(编译器可以优化掉)或字符串。

    编辑:正如在其他答案中所报告的那样, _Bool被定义为可以存储0或1的无符号整数类型。因此,以及在传递给printf()时它将被提升为unsigned int的事实,我会说%u %d是最合适的说明符。

    没有。 只需使用%d%i说明符处理它就像int一样。

    _Bool

    在C99中,引入了一个新的关键字_Bool作为新的布尔类型。 在许多方面,它的行为很像unsigned int,但是来自其他整数类型或指针的转换总是被约束为0和1.除了其他无符号类型之外,并且正如人们对布尔类型所期望的那样,这样的转换为0,如果并且仅当有问题的表达式求值为0且在所有其他情况下为1时。 标题stdbool.h提供了宏bool,true和false,分别定义为_Bool,1和0。

    实现它的第一种方法是使用char或( int8_tenumbit fields 。 但实际上,这取决于。 它可以是inttypedef (正如我所提到的,它被使用,但不推荐,受bug影响)或charunsigned int或enum和常用的#define

    例如, Apple的实现使用int ,如您所见:

     #ifndef _STDBOOL_H_ #define _STDBOOL_H_ #define __bool_true_false_are_defined 1 #ifndef __cplusplus #define false 0 #define true 1 #define bool _Bool #if __STDC_VERSION__ < 199901L && __GNUC__ < 3 typedef int _Bool; #endif #endif /* !__cplusplus */ #endif /* !_STDBOOL_H_ */ 

    其他实施:

    typedef int8_t _Bool;

    typedef enum { false = 0, true = 1 } bool;

    typedef unsigned char Boolean; typedef _Bool Boolean;

    我使用%b作为Java printf()转换说明符。 我最近尝试过,令我惊讶的是它有效。

    这是代码行:

     System.out.printf("firstRobot == secondRobot: %b",firstRobot == secondRobot); 

    这是输出:

    需要了解更多c/c++开发分享_Bool的printf转换说明符?,也可以关注C/ C++技术分享栏目---计算机技术网(www.ctvol.com)!

     firstRobot == secondRobot: false 

      以上就是c/c++开发分享_Bool的printf转换说明符?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

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

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐