`
pipal
  • 浏览: 164368 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

关于C语言中的do{}while(0);使用

阅读更多
以前在群里有人问do{}while(false)有什么用,有人回答,是为了格式的工整,当时并没怎么理解,后来有了慢慢的体会。以下我自己写的一个小程序用到了这个结构。
以前写程序,当发生错误时都是直接用exit(int)或者return(int)来中止错误,现在这个结构也可以达到这个目的,并且优于前者。当你并不想直接中止程序时,这个结构用处就很大,这在大型的编程里是经常见到的。
/**
*The program is to read msg from filename argv[1] && print to the CRT
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FREEIF(PTR) {if (PTR) {free(PTR);PTR=NULL;}}
#define CLOSEIF(PTR) {if (PTR) {free(PTR);PTR=NULL}}
#define PRTMSG(MSG)	printf("%s\n",(MSG));

void
prtUsage (const char *str)
{
  printf ("Usage:%s inFile\n", str);
}

int
main (int argc, char **argv)
{
  char *ptr = NULL;
  FILE *fin = NULL;
  int iLen = 0;
  do
    {
      if (2 != argc)
	{
	  prtUsage (argv[0]);
	  break;
	}
      if (!(fin = fopen (argv[1], "r")))
	{
	  perror ("fopen err:");
	  break;
	}

      fseek (fin, 0L, SEEK_END);
      iLen = ftell (fin);
      rewind (fin);
      if (!(ptr = (char *) malloc (sizeof (char) * (iLen + 1))))
	{
	  perror ("malloc err:");
	  break;
	}
      memset (ptr, 0, iLen + 1);
      fread ((void *) ptr, iLen, 1, fin);
      PRTMSG (ptr);
    }
  while (0);
  CLOSEIF (fin);
  FREEIF (ptr);
  return 0;
}


0
0
分享到:
评论
5 楼 pipal 2010-03-01  
night_stalker 写道

另外如果纯粹为了层次分明,直接加个花括号 { .... } 就行了。

看看3楼的帖子,很好地回答了你的问题。
4 楼 pipal 2010-03-01  
RednaxelaFX 写道
这种用法在宏里也会见到,例如这样


里面的例子挺好的,但你写的宏我还是没看明白。
3 楼 RednaxelaFX 2010-02-28  
这种用法在宏里也会见到,例如这样
2 楼 night_stalker 2010-02-27  

另外如果纯粹为了层次分明,直接加个花括号 { .... } 就行了。
1 楼 Jonney 2010-02-21  
好办法

相关推荐

Global site tag (gtag.js) - Google Analytics