最近看到一个接口函数是比较两个时间值,直观性的理解这个函数非常重要,
c
/*
* lhs < rhs: return <0
* lhs == rhs: return 0
* lhs > rhs: return >0
*/
static inline int timespec64_compare(const struct timespec64 *lhs, const struct timespec64 *rhs)
{
if (lhs->tv_sec < rhs->tv_sec)
return -1;
if (lhs->tv_sec > rhs->tv_sec)
return 1;
return lhs->tv_nsec - rhs->tv_nsec;
}
如果想直观的理解,就要理解为返回的结果是lhs减去rhs,这有点类似,汇编语言的风格。汇编的格式分为AT&T和Intel的风格:
ATT版的格式;
GAS:GNU Assembly;gcc 汇编器
ATT的格式是:AX->BX (mov AX, BX) 所有寄存器名称之前都有%出现,为了区分与符号名称。为什么ATT会选用这个格式呢?The 'source, dest' convention is maintained for compatibility with previous Unix assemblers,是为了和之前的Unix的编译器兼容。还是向后兼容,所以历史以及传承的重要性在计算机里可以很好的表现处理。
Intel的格式是:AX=BX (mov AX, BX)
这两种格式,实现的工作,正好相反(对于mov指令来说)。
https://blog.csdn.net/qq_36428903/article/details/117615087
memcmp 的比较也是类似的规律