抓住退出价值

时间:2015-11-21 19:55:30

标签: c

我还在学习C语言,对我来说处理目前的情况有点棘手。

我创建了一个名为exitvalue的全局变量来跟踪值。我知道我可以使用return,但我想在不使用return的情况下进行实验。

我想通过不断将值更改为0或1来跟踪每个exitvalue中的if statement条件。

以下是我的示例代码的片段:

//Global variable
int exitvalue;    

int functionName() {
    if (some conditions) {
        // some codes....
        exitvalue = 1;
        exit(1);
     }
     exitvalue = 0;
}

问题是exitvalue在到达1中的if语句后没有更改为functionName()的原因?是不是exit(1)有点像破坏语句并阻止它将值exitvalue设置回0?

希望有人可以解释我所犯的这个缺陷。感谢。

4 个答案:

答案 0 :(得分:4)

变量 更改其值,但随后您立即退出并终止该过程。 <{1}}函数不会返回。

答案 1 :(得分:2)

对库函数exit的调用将终止正在运行的程序。如果使用等于0EXIT_SUCCESS的参数调用,它将向主机环境返回成功的终止状态。如果使用等于EXIT_FAILURE的参数调用它,它将返回不成功的终止状态。如果参数不是这些宏,则终止状态取决于实现。

exit函数应仅用于此目的,以立即终止正在运行的程序,并向主机环境发出成功或不成功的程序执行信号。

如果您只想从函数返回一个整数值,请使用带有整数参数的return关键字,例如return 5

您发布的代码包含一个声明为返回整数的函数:int functionName()。因此,此函数应返回一个整数值,并接受任意数量的输入参数。请注意,在C中,不接受参数的函数应使用类型void的参数列表声明,例如int functionName(void)

由于您的代码缺少一个返回语句,它在技术上是无效的,exit函数不用于返回函数中的值,如前所述。此外,删除exit语句不会阻止exitvalue全局变量假设值为零。如果满足条件,它将在if语句中设置为1,但是一旦从if语句的块退出时执行exitvalue = 0;代码,它将被重写为零。

在我看来,您只想监视程序执行,一种简单的方法是在代码中的有趣位置添加printf的调用。这可以通过包含系统头stdio.h并执行如下调用来完成:

#include <stdio.h>
void myCoolFunction(void)
{
    if (condition1)
    {
         printf("Condition one was satisfied.\n");
    }
    else if (condition2)
    {
        printf("Condition two was satisfied.\n");
    }
    else
    {
        printf("Something else happened.\n");
    }
}

如果要打印整数变量的值,可以使用此语法。

void myFunction(void)
{
     int myValue = 4;
     printf("The value of the myValue variable is: %d.\n", myValue);
}

有关printf功能的详细信息,您可以查看以下链接:http://www.cplusplus.com/reference/cstdio/printf/

答案 2 :(得分:1)

我认为你想使用return而不是exitreturn语句允许退出函数(带有返回值),而exit用于退出程序。这是你想要的吗?

return 0;

return 1;

return exitvalue;

答案 3 :(得分:1)

冒着鼓励全球变量坏习惯的风险:

void functionName() 
{
    if (some conditions) 
    {
        // some code....
        exitvalue = 1 ;
    }
    else
    {
        exitvalue = 0 ;
    }
}

或者只是:

void functionName() 
{
    exitvalue = 0 ;
    if (some conditions) 
    {
        // some code....
        exitvalue = 1 ;
    }
}