KEIL 中结构体对指定元素(函数指针)初始化的探索(呼吸灯为例)

摘要:
将结构初始化为指定元素类似于以下操作:1structlzh{intx;inty;};2结构先觉=3{.x=1.4.y=25};在KEILMDK中使用时,会报告一个错误:“应为表达式”。事实上,编译器不支持C99标准。我们可以打开C99模式,让编译器支持C99标准。我无法测试这种方法!最后,我们使用函数赋值的方法来完成实例化。以我的呼吸灯为例来说明这个问题:1/

结构体对指定元素初始化就是类似下面的操作:

1 struct lzh { int x; int y; }; 
2 struct lzh xianjue = 
3 { .x = 1, 
4   .y = 2 
5 };

在KEIL MDK中使用却报错:“expected an expression”。其实就是编译器不支持C99标准,我们可以打开C99模式让编译器支持C99标准.此方法我测试不通! 最终还是使用函数赋值的方法完成的实例化。 以我的呼吸灯为例说明这个问题:

 1 /*****************************声明呼吸灯对象接口**********************************/
 2 typedef struct { 
 3 void (*breathInit)(void); //呼吸灯初始化
 4 void (*startBreath)(void); //呼吸灯开始呼吸 
 5 void (*stopBreath)(void); //呼吸灯 
 6 void (*taskBreath)(void); //呼吸灯任务轮询,放在1Ms轮询任务里 
 7 }breathfuns_t;
 8 /*************void breathfunsInit(void) 实例化呼吸灯的对象***************/
 9 breathfuns_t breathfuns; //声明一个呼吸灯对象
10 void breathfunsInit(void)
11 {
12 breathfuns.breathInit = breathLedInit; //实例化呼吸灯对象
13 breathfuns.startBreath = startbreath;
14 breathfuns.stopBreath = stopbreath;
15 breathfuns.taskBreath = breathLedTask;
16 }

如此,呼吸灯功能对于主函数的接口就只有结构体变量:breathfuns.比如: breathfuns.startBreath(); 不必再去用extern去声明一大丢的功能函数,真正做到了三化:模块化,分层化,对象化! 没有人一开始就是天下无敌,除了天赋,后期的训练和实战才是根本,只有专研和深耕自身的武艺水平,才能达到其他人达不到的顶尖水平。这句话来自网络,我想也同样适用于嵌入式软硬件领域, 针对本文中所有的错误和不足,欢迎交流,交流技术和项目合作均可。等你来撩我哦!加我请说明来意,谢谢。

KEIL 中结构体对指定元素(函数指针)初始化的探索(呼吸灯为例)第1张

免责声明:文章转载自《KEIL 中结构体对指定元素(函数指针)初始化的探索(呼吸灯为例)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux Redhat 7 安装免费yum源Spring的bean管理--注解和配置文件混合使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux c libcurl的简单使用(转)

curl是Linux下一个非常著名的下载库,通过这个库,可以很简单的实现文件的下载等操作。看一个简单的例子: 1 #include <curl/curl.h> 2 #include <stdio.h> 3 #include <string.h> 4 5 CURL *curl; 6 CURLcode...

duilib之源码分析

《duilib之源码分析》1 stdAfx.h [cpp]view plaincopy *lengthof(x)计算数组长度宏 *MAX两值最大 *MIN两值最小 *CLAMP(x,a,b)x在a,b之间则取x否则取最小 2 UIBase [cpp]view plaincopy *UI_WNDSTYLE_窗口风格属性 *UI_CLASS...

Keil 二进制数输入宏

源:http://hi.baidu.com/skystalker/item/e7679cd79c6f751220e250c1?qq-pf-to=pcqq.c2c 在C语言中有十进制,十六进制,八进制;没有二进制的定义,在C51中使用十六进制表示有时不太直观,下面介绍几种方法表示二进制[均来自网络] 方法一 #define _BIN(a,b,c,d,e,f,...

C99规范

1. 增加restrict指针    C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的语义。    如果某个函数定义了两个restr...

VC++ MFC Progress Control 进度条

1.常用函数 SetRange(0,100)设置范围; SetStep(int i)设置步长; StepIt();单步递增进度; int SetPos(int nPos) 设置当前位置,可以用来初始化; int GetPos()获得当前进度; 2.设置控件Progress Control控件变量。 3. m_ProgressFile.Se...

srand函数

srand函数是随机数发生器的初始化函数。  原型:void srand(unsigned seed);  用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。如: srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化,即使用 time函数来获得系统时间,...