问太阳之母,如下边规范写**如何呢?

[复制链接]
 楼主| eagle758 发表于 2007-7-14 11:13 | 显示全部楼层 |阅读模式
1、#define main_loop do {fsystem=0;main_tran();}while(0);
2、#define main_loop    {fsystem=0;main_tran();}

其实2实现的功能和1是一样。不知道套用do{}while上去有什么作用?
古道热肠 发表于 2007-7-14 11:44 | 显示全部楼层

也许是便于调试吧

 将While(0)改成While(1)时就会大不一样了。
 楼主| eagle758 发表于 2007-7-14 15:49 | 显示全部楼层

顶,希望大虾现身说法

上面有点错误,更正
1.#define main_loop do {fsystem=0;main_tran();}while(0)//这里多了分号
2、#define main_loop    {fsystem=0;main_tran();}

 
太阳之母 发表于 2007-7-14 16:26 | 显示全部楼层

是这样的

以例子说明问题吧
void some_function()
{
  ... ...
  if(some_condition) main_loop;  /*习惯性的会写这个分号!!!*/
  else do_another_thing();
  ... ...
}

按1.的定义,宏替换如下:
void some_function()
{
  ... ...
  if(some_condition) do {fsystem=0;main_tran();}while(0);/*这个分号不会出问题的*/
  else do_another_thing();
  ... ...
}

按2.的定义,宏替换如下:
void some_function()
{
  ... ...
  if(some_condition) {fsystem=0;main_tran();};/*这个分号一定会出问题的,因为下面的else走不下去,嘿嘿*/
  else do_another_thing();
  ... ...
}

平常人 发表于 2007-7-14 16:33 | 显示全部楼层

4楼说的好!

顶上去!
hqgboy 发表于 2007-7-14 16:40 | 显示全部楼层

不错...顶..

 楼主| eagle758 发表于 2007-7-14 16:50 | 显示全部楼层

增见识了,但还还没有解释套用do{}while上去有什么作用

平常人 发表于 2007-7-14 17:12 | 显示全部楼层

4楼的例子非常清楚地说明do{}while的作用

gyt 发表于 2007-7-15 16:57 | 显示全部楼层

好的老师

太阳之母很适宜于做老师:)
古道热肠 发表于 2007-7-16 14:44 | 显示全部楼层

问太阳之母,如下边规范写**如何呢?

void some_function()
{
  ... ...
  if(some_condition)
  {
       main_loop;  /*习惯性的会写这个分号!!!*/
  }
  else
  {
       do_another_thing();
  }
  ... ...
}

最不习惯省几个大括号对,搞所谓的技巧,见着要想半天,用选择语句我都做好框架,再填内容,一目了然。
太阳之母 发表于 2007-7-17 02:54 | 显示全部楼层

回10楼

这样当然很好啦!不过,在C里使用宏定义的主要目的之一就是构造"类似于自然语言**的C语言程序"嘛!所以书写格式上适当的简略也许是必要的.
古道热肠 发表于 2007-7-17 09:28 | 显示全部楼层

自然是优点还是缺点?

  C语言的这种自由性也许是个缺点,它远不如Pascal语言严谨。至于宏定义,它的用处窃以为主要是提高可读性、可移植性、可维护性,楼主的这种宏定义还不始将代码直接嵌入程序中好用,想简洁明了用子程序也不错,现在的单片机速度跟过去比也大幅提高了。
农民讲习所 发表于 2007-7-17 10:10 | 显示全部楼层

这是C、C++高手们公认的写法

可以减少宏语句和其它语句合并书写时发生错误。
do{}while(0)是没任何实际语法意义,这里只用来区分语句。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

119

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部