RETURN SUCCESS VS RETURN 0

Jul 6, 2012 at 6:16pm
As in the title, what is the difference between RETURN SUCCESS and RETURN 0?
Thanks.
Bosco
Jul 6, 2012 at 6:36pm
The difference is that we all know what is 0 and nobody except of the author of this statement knows what is SUCCESS. Also nobody knows what is RETURN.:)

I can only guess that maybe SUCCESS is a manifest constant that names the same 0. Something as

#define SUCCESS 0

There are standard constants as EXIT_SUCCESS and EXIT_FAILURE in the C/C++ standard. EXIT_SUCCESS denotes 0.

So it would be better to write

return EXIT_SUCCESS;

It is the same as

return 0;
Last edited on Jul 6, 2012 at 6:49pm
Jul 6, 2012 at 6:50pm
There is no big difference from your EntryPoint. There is some differences when using custom functions, but you will learn about it further, as you don't seem to understand them (only a tought).
Jul 6, 2012 at 6:54pm
The idea is that EXIT_SUCCESS can be used to return different values depending on the operating system; just in case a platform uses 0 to signal failure, and 1 to signal success for example.
Jul 6, 2012 at 7:04pm
According to the C/C++ standard

"If the value of status is zero or EXIT_SUCCESS, an implementation-defined form of the status successful termination is returned."


So EXIT_SUCCESS can be considered as an equivalence of 0 and indeed it is defined as 0 in most implementations. I do not know even an implementation where EXIT_SUCCESS would have a value distinguished from 0.
Jul 6, 2012 at 7:22pm
So EXIT_SUCCESS can be considered as an equivalence of 0 and indeed it is defined as 0 in most implementations.


That's true. But I guess it would seam more logical to use EXIT_SUCCESS in the case that an implementation does define 0 as failure, because at least what is written in your code would match what is happening; that is your code won't say return 0, and really be return 1.

But your right, I don't even know if an implementation exists which doesn't define 0 as success.

I have read that EXIT_FAILURE is more important to use in some cases, and if your using EXIT_FAILURE, you might as well use EXIT_SUCCESS.
Last edited on Jul 6, 2012 at 7:23pm
Jul 6, 2012 at 7:25pm
@iseeplusplus
But I guess it would seam more logical to use EXIT_SUCCESS in the case that an implementation does define 0 as failure,


You are wrong. Read again the statement from the Standard I cited. 0 may not define a failure.
Jul 6, 2012 at 7:28pm
You are wrong. Read again the statement from the Standard I cited. 0 may not define a failure.


I don't understand what you mean? Are you saying that in the case zero defines a failure, that zero may not define a failure? That doesn't make any sense?
Last edited on Jul 6, 2012 at 7:28pm
Jul 6, 2012 at 7:32pm
Are these words yours?

in the case that an implementation does define 0 as failure,


I said that 0 may not be defined as failure.
Last edited on Jul 6, 2012 at 7:33pm
Jul 6, 2012 at 7:39pm
I said that 0 may not be defined as failure.


What you cited does not say that. It says that your return 0; will be translated into the implementation definition of success. Which means it may be translated into a 1.

Upon EXIT_FAILURE, your return will be translated into the implementation definition of failure. There isn't a law that I am aware of that says you can't write an operating system which defines 0 as failure.

But that was just a hypothetical to demonstrate the point I was trying to make.
Last edited on Jul 6, 2012 at 7:44pm
Jul 6, 2012 at 7:48pm
Do you understand what you are writing?!!!

Are these words yours?!!!

But I guess it would seam more logical to use EXIT_SUCCESS in the case that an implementation does define 0 as failure


Or you had written that and did not understand what it means?

Read one more the statement from the standard

"If the value of status is zero or EXIT_SUCCESS, an implementation-defined form of the status successful termination is returned."


Or you do not understand what is written in the Standard?!!!
Last edited on Jul 6, 2012 at 7:50pm
Jul 6, 2012 at 7:52pm
That's true. But I guess it would seam more logical to use EXIT_SUCCESS in the case that an implementation does define 0 as failure, because at least what is written in your code would match what is happening; that is your code won't say return 0, and really be return 1.


Yes, except that a return of zero is also standard. Regardless, using EXIT_SUCCESS removes the dependence on a "magic number." In other words, if the standard were to change the return value for success (not going to happen but as an example) you wouldn't have to change all of your return zeros, EXIT_SUCCESS could just be changed in the implementation.

It's important to note this distinction when developing maintainable software. In this particular case, the standard makes either roughly the same. When developing an API or using 3rd party libraries, always try to break dependencies on implementation-specific values.
Jul 6, 2012 at 8:00pm
Or you had written that and did not understand what it means?

Read one more the statement from the standard


Your misunderstanding. The implementation is the operating system. The C++ standard your talking about relates to a programming language.
Last edited on Jul 6, 2012 at 8:01pm
Jul 6, 2012 at 8:03pm
@iseeplusplus
Your misunderstanding. The implementation is the operating system. The C++ standard your talking about relates to a programming language.


It is you who can not understand that whether 0 or EXIT_SUCCESS will be specified an implementation-defined form of the status successful termination is returned."
Jul 6, 2012 at 8:06pm
It is you who doesn't seam to understand, that when a program returns EXIT_FAILURE, it may be translated into an implementation specific definition of failure. Show me where it is stated that an implementation cannot define 0 as failure?
Last edited on Jul 6, 2012 at 8:10pm
Jul 6, 2012 at 8:17pm
Using EXIT_SUCCES you also do not know what will be implementation specific definition of success. But you write programs according to the C/C++ standard. And others programmers who read your code also do not know what is the implementation specific definition of success. It is only important whether success is returned to an operation system. So if you will write return EXIT_SUCCESS it wil say nothing more for the reader of the program than if you will write return 0.
Last edited on Jul 6, 2012 at 8:19pm
Jul 6, 2012 at 8:33pm
1
2
3
4
5
6
if ( success ) {
    return EXIT_SUCCESS;
}
else {
    return EXIT_FAILURE;
}


looks slightly better in my opinion than:

1
2
3
4
5
6
if ( success ) {
    return 0;
}
else {
    return EXIT_FAILURE;
}


But its really not that important.
Last edited on Jul 6, 2012 at 8:50pm
Jul 6, 2012 at 10:29pm
Or than return not success; xP

return ERROR_SUCCESS; ... ¿what?
Topic archived. No new replies allowed.