C++使用#define访问struct?

0 c++ c-preprocessor

我正在测试一些C++代码.目前有一个问题我无法理解其起源.代码是这样的:

        typedef struct
        {
          UWORD tFollowUp_uw;

          union
          {
            UBYTE Control_ub;

            struct
            {
              BITFIELD8 Request_b1  :1;
            }b_st;
          }b_un;
        }X_CONTROLS;

    #define Request_b       (Controls_st.b_un.b_st.Request_b1)
    #define tFollowUp_uw    (Controls_st.tFollowUp_uw)

class Class_T20
{
  public:
      X_CONTROLS Controls_st;
}
Run Code Online (Sandbox Code Playgroud)

所以,当我测试这些LOC时,我首先声明一个对象Class_T20_obj.

我只能Request_b1通过调用来访问变量Class_T20_obj.Controls_st.b_un.b_st.Request_b1

我无法tFollowUp_uw通过调用访问变量Class_T20_obj.Controls_st.tFollowUp_uw

谁能帮我这个?

Mik*_*our 6

我无法tFollowUp_uw通过调用访问变量Class_T20_obj.Controls_st.tFollowUp_uw

那是因为tFollowUp_uw是一个邪恶的宏,所以这被转换为

Class_T20_obj.Controls_st.(Controls_st.tFollowUp_uw)
Run Code Online (Sandbox Code Playgroud)

失败,因为Controls_st没有一个成员也被称为Controls_st; 还因为你不能把括号括在这样的成员名字周围.

Class_T20_obj.tFollowUp_uw在从中删除流氓括号之后使用宏; 或摆脱它.

  • 随着"摆脱它"的压力,我猜:) (3认同)