C如何断言该结构不等于零?

问题描述 投票:-1回答:1

我试图(以我的C#背景)理解以下断言如何对msf_s起作用:

https://github.com/ShiftMediaProject/libcdio/blob/master/lib/driver/sector.c#L66

cdio_assert (msf != 0);

https://github.com/ShiftMediaProject/libcdio/blob/master/lib/driver/cdio_assert.h#L50

#define cdio_assert(expr) \
 assert(expr)

https://github.com/ShiftMediaProject/libcdio/blob/master/include/cdio/types.h#L217

  PRAGMA_BEGIN_PACKED
  struct msf_s {
    uint8_t m, s, f; /* BCD encoded! */
  } GNUC_PACKED;
  PRAGMA_END_PACKED

在以下snippet中使用:

lba_t
cdio_msf_to_lba (const msf_t *msf)
{
  uint32_t lba = 0;

  cdio_assert (msf != 0);

  lba = cdio_from_bcd8 (msf->m);
  lba *= CDIO_CD_SECS_PER_MIN;

  lba += cdio_from_bcd8 (msf->s);
  lba *= CDIO_CD_FRAMES_PER_SEC;

  lba += cdio_from_bcd8 (msf->f);

  return lba;
}

基本上,我需要在C#中复制相同的行为。

问题:

cdio_assertmsf_s的每个字段求和并断言它们不等于零吗?

c# c assert zero
1个回答
5
投票

如果您仔细查看链接的代码:

void
cdio_lsn_to_msf (lsn_t lsn, msf_t *msf) // <===== here
{
  int m, s, f;

  cdio_assert (msf != 0);

  // ...

您将看到变量msfa指针指向类型为msf_t的变量。虽然将结构设为0没有意义,但指针可以很好地为0,也就是NULL。该行只是在使用msf之前确保其有效。在大多数情况下,此操作是通过if完成的,但是此函数显然希望该值有效。

C#中的等效项是声明msf != null

© www.soinside.com 2019 - 2024. All rights reserved.