如何将const uint8_t * const转换为bool

时间:2017-11-29 09:09:01

标签: c pointers type-conversion boolean

const uint8_t * const val;
int num = 5;
const bool res = (val && (num>0));

在这里,我需要将const uint8_t* const类型的指针转​​换为bool。 我该怎么做/应该这样做?

2 个答案:

答案 0 :(得分:2)

问题在于:

const uint8_t * const val;

它指向const的{​​{1}}指针,因此要么必须指向某个有效内存,通常是const uint8_t变量/值,要么摆脱{{1} }}岬。

启用警告后,编译器会在此语句中生成警告:

const

因为const尚未初始化。在您的情况下,编译器在这里抱怨,因为它是未定义的行为。但是,我得到的问题不是关于为什么或如何处理未定义的行为,所以不要深入研究。

请参阅以下代码:

const bool res = (val && (num>0));

输出:

val

符合预期:#include<stdio.h> typedef unsigned char uint8_t; // There are better ways of doing it, but I am lazy right now typedef enum { TRUE = 1, FALSE = 0 } Bool_t; // There are better ways of doing it, but I am lazy right now int main() { const uint8_t ch = 'A'; //0x41 // Below initialization/assignment is what you missed. const uint8_t * const val = &ch; int num = 5; const Bool_t res = *val + num; //The above assignment is not suited in terms of accuracy because, //`res` is type `Bool_t`, so it *should* ideally be assigned //with values either TRUE or FALSE, but anyways, here we go. printf("0x%x", res); } + 0x46 'A'

注意:您始终可以养成在启用所有警告的情况下编译代码的习惯。花些时间阅读this rich documentation。到那时,0x05或更好0x46是您所需要的。

答案 1 :(得分:1)

如果您在启用警告的情况下编译代码,您将获得:

warning: 'val' is used uninitialized in this function [-Wuninitialized]
    const bool res = (val && (num>0));
                     ~~~~~^~~~~~~~~~~

这是因为你声明了你的指针,但你没有初始化它,在这里:

const uint8_t * const val;

将其初始化为一个值,例如:

uint8_t v = 5; // example value
const uint8_t * const val = &v;
  

如何将const uint8_t * const转换为bool

无论你有const个关键词,都需要关注你有一个指针。

所有指针都隐式可转换为布尔值(因此bool也是如此),这意味着您不必再做更多事情,您的代码应该可以解决问题(现在您已初始化val)。