编程学习: 打开SimpliciTI-IAR-1.2.0中的Simple_Peer_to_Peer-CC1110-Linkto, 如图所示 仔细观察左边窗口,我们可以更好地理解SimpliciTI协议栈结构, bsp、mfri、nwk、nwk.application,而我们的主程序就在用户程序应用层 peer.application中。 其中在bsp>bsp.c>bsp.macros.h中,出现了 #definest(x) do {x} while{__LINK__==-1},上面的英文解释我没有看懂, 于是就按前辈说的,此语句功能和do{}while(0);去百度了。 有两个例子来说明: 第一: 假设有这么一个宏定义: # define FOO(x) print(“arg is %s/n”,x);do_something_useful(x) 现在使用这个宏: If(blah==2) F00(blah); 看起来好像挺正确的,但是,当我们把这个宏展开的时候,就是这样了: If(blah==2) print(“arg is %s/n”,blah);// 分号,表示if语句结束了 do_something_useful(blah); 这时,if语句中只有print(“arg is %s/n”,blah),而do_something_useful (blah)并没有包含在if语句中,而是当执行完if语句之后,接下来就是顺序执 行do_something_useful(blah);也就是说,并没有达到我们想要的效果。 但是,如果我们这样 If(blah==2) do{ print(“arg is %s/n”,blah); do_something_useful(blah); }while(0);就可以了 第二: 假设有这样一个宏定义; #defineexch(x,y) {int temp; temp=x;x=y;y=temp;} 现在使用这个宏: if (x>y) exch(x,y); else do_something(); 看起来也好像是正确的,现在我们来展开: if(x>y) { int temp; temp=x; x=y; y=temp; };//这里出问题了 else do_something(); 我们知道,在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号{}将这几个语句括起来成为一个复合语句。注意,花括号{}外面不需要加分号。因为{}内是一个完整复合语句,不需要另外附加分号。 这几天就是学了这么些了,很惭愧,进度很慢。明天从直接进入main函数吧,
|