编程学习:打开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函数吧,