我试图了解(以我的 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并断言它们不等于零?
如果您仔细查看链接的代码:
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。
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |