您的位置:程序门 -> c/c++ ->



c 语言如何中止函数运行


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


c 语言如何中止函数运行[已结贴,结贴人:zhishupp]
发表于:2007-08-21 19:12:43 楼主
有一个函数
int   test(int   *p)
{
    int   x;

    ……
    if   (p   ==   null)
    {
          我要在这里退出函数,但是不退出程序,应该怎么做?
    }

    ……
    return   x;
}

int   main()
{
    int   a;
    int   *p;

    ……

    a   =   test(p);

    ……
    return   0;

}

有这么几个问题:
1.   如果用   return   的话?我   return   一个什么样的值呢?函数正常运行(p!=null)时,函数   test   的返回值取值范围是   int   型中所有的值,因此   return   无法使用。
2.   用   exit   或   abort   就会直接退出程序,但是我仅仅希望退出函数。
3.   if   (p   ==   null)   这个条件我希望放在   test   函数中,而不是主函数中,我觉得这样函数的模块化会更好一些。
4.   这个貌似   c++   中的异常处理可以解决,但是   c   语言中没有异常处理。

请教高人!

发表于:2007-08-21 19:30:281楼 得分:5
感觉楼主说的话和想要实现的功能有点自相矛盾。

要想退出函数,唯一的办法就是return。既然函数返回值是int,那return只能返回int。
发表于:2007-08-21 19:41:482楼 得分:5
如果你这个函数需要取得所有int值的话,你可以这样
bool   test(int   *p,int   *x)
{                                                   //用x指针来返回你想要的结果,而程序用return返回true   或flase
  if   (p   ==   null)
  return   flase;                    
      .....

}
发表于:2007-08-21 19:43:333楼 得分:5
assert(p);
发表于:2007-08-21 19:49:064楼 得分:5
要做就变态点,采用go语句就ok了。
发表于:2007-08-21 19:49:395楼 得分:5
#include   "windows.h "
#include   "iostream "

using   namespace   std;


int   fun(int*   p)
{
        setlasterror(error_success);
        if   (p   ==   null)
        {
                setlasterror(error_invalid_handle);
                return   0;
        }
        return   *p;
}

int   main()
{
        int   n   =   0;

        if   (fun(&n)   ==   0   &&   getlasterror()   ==   error_invalid_handle)
        {
                cout < < "error " < <endl;
        }
        else
        {
                cout < < "success " < <endl;
        }

        if   (fun(null)   ==   0   &&   getlasterror()   ==   error_invalid_handle)
        {
                cout < < "error " < <endl;
        }
        else
        {
                cout < < "success " < <endl;
        }


        return   0;
}
发表于:2007-08-21 20:02:356楼 得分:10
函数设计的不合理
发表于:2007-08-21 20:58:137楼 得分:1
可以在程序中break,调试一下就可以了
发表于:2007-08-22 15:42:598楼 得分:5
可以goto,直接return呀,如果要想要抛出异常一样先setjmp,再在那儿longjmp吧
发表于:2007-08-22 15:49:179楼 得分:3
setjmp,longjmp
发表于:2007-08-22 16:20:1910楼 得分:3
setjmp,longjmp
发表于:2007-08-22 16:34:5311楼 得分:3
setjmp,longjmp


快速检索

最新资讯
热门点击