我试图了解(以我的 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/