C 用于IF-Statments和while-loops的短路

C++ Short-Circuit for IF-Statments and While-Loops

本文关键字:短路 while-loops 用于 IF-Statments      更新时间:2023-10-16

我问自己是否可以在C 和C中使用以下if-condition:

uvc_frame_t *frame = ...; //receive a new frame
if(frame != NULL && frame->data != NULL) cout << "Data read";
    else cout << "Either frame was NULL or no data was read!";

我不确定这个语句是否会丢掉分段错误,因为如果frameNULL,那么您无法检查frame->data

  • while环条件是否相同?

    while(frame == NULL && frame->data == NULL)
    {
    //.. receive frame
    }
    
  • ||操作员是否相同?

  • 以及如何强制评估if statement中的所有值(即使我检查3个变量(

这是frame的基础结构:

typedef struct uvc_frame {
   void *data;
   size_t data_bytes;
   uint32_t width;
   uint32_t height;
   enum uvc_frame_format frame_format;
   size_t step;
   uint32_t sequence;
   struct timeval capture_time;
   uvc_device_handle_t *source;
   uint8_t library_owns_data;
 } uvc_frame_t;

我不确定这个语句是否会抛出分段故障

它不会出现故障。实际上,这是短路逻辑运算符的典型应用。

,在循环条件时是否相同?

是。

短路评估不是IF条件或条件的属性。它是表达本身的属性。即使没有用作条件,它仍然是短路。

例如,这仍然是短路的:

bool x = frame != NULL && frame->data != NULL;

,对于||也一样操作员?

是的。它也是短路。

好吧,不完全是。或关系在第一部分为真时将其短路。这与和。

并不完全相同