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

Ayb*_*ybe -2 c c# assert zero

我试图了解(以我的 C# 背景)以下断言如何工作msf_s

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

cdio_assert (msf != 0);
Run Code Online (Sandbox Code Playgroud)

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

#define cdio_assert(expr) \
 assert(expr)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

它用于以下代码段

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;
}
Run Code Online (Sandbox Code Playgroud)

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

题:

是否cdio_assert总结每个字段msf_s并断言它们不等于零?

Mar*_*lli 5

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

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

  cdio_assert (msf != 0);

  // ...
Run Code Online (Sandbox Code Playgroud)

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

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