你能解释一下这起源于什么吗?

时间:2015-09-14 18:07:13

标签: c

BOOL MACIsTxReady(void)
{
   return !ReadETHReg(ECON1).ECON1bits.TXRTS;
}

这是ReadETHReg(ECON1)一个函数,然后是它后面的东西是什么? 请原谅我糟糕的英语。

3 个答案:

答案 0 :(得分:2)

将其视为此

xx = ReadETHReg(ECON1);
yy = xx.ECON1bits;
zz = !yy.TXRTS;

您需要探索ReadETHReg的定义以找出它返回的内容(可能是结构)

或者它可能是一个宏

答案 1 :(得分:0)

由于运营商优先权,

return !ReadETHReg(ECON1).ECON1bits.TXRTS;

相当于:

return !(ReadETHReg(ECON1).ECON1bits.TXRTS);

ReadETHReg(ECON1)似乎会返回一个struct,其成员ECON1bits,而struct成员TXRTS

答案 2 :(得分:0)

这个ReadETHReg(ECON1)是一个返回结构的函数。这个.ECON1bits.TXRTS正在访问返回的第一个结构内的另一个结构内的值。

就像在这段代码中一样:

#include <stdbool.h>

typedef bool BOOL;
int ECON1 = 42;

struct S {
    struct {
        bool TXRTS;
    } ECON1bits;
};

struct S ReadETHReg(int val)
{
    struct S ret;
    ret.ECON1bits.TXRTS = val > 40 && val < 50;

    return ret;
}

BOOL MACIsTxReady(void)
{
   return !ReadETHReg(ECON1).ECON1bits.TXRTS;
}