This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

有关结构体代码编程的问题

问题:在学习InstaSPIN - FOC 时发现, proj_lab01b

   有的结构体

typedef struct _CTRL_Obj_
{
......
} CTRL_Obj;
typedef struct _CTRL_Obj_ *CTRL_Handle;
这个是一样的,能够理解

但是有的结构体

typedef struct _DATALOG_OBJ_
{
int32_t *iptr[DATA_LOG_BUFF_NUM];

bool Flag_EnableLogData; 

bool Flag_EnableLogOneShot; 
int16_t cntr; 
int16_t size; 
} DATALOG_Obj;

typedef struct _DATALOG_Obj_ *DATALOG_Handle;

标红的不一样,但是编译能够通过,这个如何解释,而且_DATALOG_Obj_也搜索不到

  • 1 首先://注意在C和C++里不同
        在C中定义一个结构体类型要用typedef:
        typedef struct Student
        {
        int a;
        }Stu;
        于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明)
        这里的Stu实际上就是struct Student的别名。Stu==struct Student
        另外这里也可以不写Student(于是也不能struct Student stu1;了,必须是Stu stu1;)
        typedef struct
        {
        int a;
        }Stu;
        但在c++里很简单,直接
        struct Student
        {
        int a;
        };    
        于是就定义了结构体类型Student,声明变量时直接Student stu2;
  • 如果自己编写结构体,肯定是第一种,编译才能通过
    上面的问题导致一个问题
    inline _iq CTRL_getVq_out_pu(CTRL_Handle handle)
    {
    CTRL_Obj *obj = (CTRL_Obj *)handle;

    return(obj->Vdq_out.value[1]);
    }
    替换为return(handle->Vdq_out.value[1]);也是没有问题的,obj和handle都是结构体指针
    但是
    DATALOG_Handle DATALOG_init(void *pMemory,const size_t numBytes)
    {
    DATALOG_Handle handle;

    if(numBytes < sizeof(DATALOG_Obj))
    return((DATALOG_Handle)NULL);

    // assign the handle
    handle = (DATALOG_Handle)pMemory;

    DATALOG_Obj *obj=(DATALOG_Obj *)handle;

    obj->cntr = 0;
    obj->size = DATA_LOG_BUFF_SIZE;

    return(handle);
    } // end of DATALOG_init() function
    这里的obj改为handle 编译就出错
  • 回答不是我想要的。我又试验了一下,终于明白编写handle这个代码的用意以及_的用处了,TI的代码也是好几个人写,规则没有统一。
  • 说错了,与_无关