并不完全相同
我问自己是否可以在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!";
我不确定这个语句是否会丢掉分段错误,因为如果frame
是NULL
,那么您无法检查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;
,对于||也一样操作员?
是的。它也是短路。
好吧,不完全是。或关系在第一部分为真时将其短路。这与和。