请教c语言宏定义与结构体

2019-07-20 21:42发布

本帖最后由 aaa405944519 于 2016-6-13 17:33 编辑

typedef struct RampGen_t                                                                //定义结构体
{
        int32_t count;
        int32_t XSCALE;
        float out;
        void (*Init)(struct RampGen_t *ramp, int32_t XSCALE);
        float (*Calc)(struct RampGen_t *ramp);
        void (*SetCounter)(struct RampGen_t *ramp, int32_t count);
        void (*ResetCounter)(struct RampGen_t *ramp);
        void (*SetScale)(struct RampGen_t *ramp, int32_t scale);
        uint8_t (*IsOverflow)(struct RampGen_t *ramp);

}RampGen_t;
#define RAMP_GEN_DAFAULT                                                        //宏定义结构体变量?可以嘛?
{
                                                        .count = 0,
                                                        .XSCALE = 0,
                                                        .out = 0,
                                                        .Init = &RampInit,
                                                        .Calc = &RampCalc,
                                                        .SetCounter = &RampSetCounter,
                                                        .ResetCounter = &RampResetCounter,
                                                        .SetScale = &RampSetScale,
                                                        .IsOverflow = &RampIsOverflow,
                                                }

RampGen_t LRSpeedRamp = RAMP_GEN_DAFAULT;                            //定义结构体变量,然后把宏定义的值赋到结构体变量中
这个程序是我看别人程序看来得,请问c语言编译有问题吗?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
zmingwang
1楼-- · 2019-07-21 02:16
本帖最后由 zmingwang 于 2016-6-13 18:43 编辑

这种带.操作的初始化方法是C99的标准,具体能不能用得看编译器,可以确定的是,GCC是肯定可以用这种方法初始化结构体,只要在CFLAG中加入-std=c99就行.GCC还扩展了一种:操作,就是 成员:值.
KEIL中用的ARMCC,我试过,是不行的,就算是选择了C99也不行.
VS编译器也不行.
所以,如果你是用的GCC编译器,直接COPY就可以了.不是的话,就要改成顺序初始化的方式.[mw_shl_code=c,true]#define RAMP_GEN_DAFAULT
{
        0,
        0,
        0,
        RampInit,
        RampCalc,
        RampSetCounter,
        RampResetCounter,
        RampSetScale,
        RampIsOverflow
}[/mw_shl_code]

一周热门 更多>