c# - C 如何断言该结构不等于 0?

标签 c# c assert zero

我试图了解(以我的 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_assert 是否对 msf_s 的每个字段求和并断言它们不等于 0?

最佳答案

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

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

  cdio_assert (msf != 0);

  // ...

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

C# 中的等效方法是断言 msf != null

关于c# - C 如何断言该结构不等于 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60007286/

相关文章:

c# - WCF Web 服务方法建议

多次调用 C 预处理器宏(通过变量)

c - C 中的静态断言

c# - new dbcontext 返回数据库中的所有数据?

c# - CRM 2011 SecurityNegotiationException 尝试访问 Web 服务

c# - 有没有人知道 SQL Server 错误号 C# 包装器?

c - 如何在短宽度终端中正确实现持续刷新的进度条?

c++ - 如何判断一个文件是否已经关闭

java - 对assertEquals 的引用不明确

java - uiautomator 多次断言