打印

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

[复制链接]
2337|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eagle758|  楼主 | 2007-7-14 11:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
古道热肠| | 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();
  ... ...
}

使用特权

评论回复
5
平常人| | 2007-7-14 16:33 | 只看该作者

4楼说的好!

顶上去!

使用特权

评论回复
6
hqgboy| | 2007-7-14 16:40 | 只看该作者

不错...顶..

使用特权

评论回复
7
eagle758|  楼主 | 2007-7-14 16:50 | 只看该作者

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

使用特权

评论回复
8
平常人| | 2007-7-14 17:12 | 只看该作者

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

使用特权

评论回复
9
gyt| | 2007-7-15 16:57 | 只看该作者

好的老师

太阳之母很适宜于做老师:)

使用特权

评论回复
10
古道热肠| | 2007-7-16 14:44 | 只看该作者

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

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

最不习惯省几个大括号对,搞所谓的技巧,见着要想半天,用选择语句我都做好框架,再填内容,一目了然。

使用特权

评论回复
11
太阳之母| | 2007-7-17 02:54 | 只看该作者

回10楼

这样当然很好啦!不过,在C里使用宏定义的主要目的之一就是构造"类似于自然语言**的C语言程序"嘛!所以书写格式上适当的简略也许是必要的.

使用特权

评论回复
12
古道热肠| | 2007-7-17 09:28 | 只看该作者

自然是优点还是缺点?

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

使用特权

评论回复
13
农民讲习所| | 2007-7-17 10:10 | 只看该作者

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

可以减少宏语句和其它语句合并书写时发生错误。
do{}while(0)是没任何实际语法意义,这里只用来区分语句。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

119

帖子

0

粉丝