Thread overview
orce exit, possible?
Nov 21, 2013
seany
Nov 21, 2013
Kelet
Nov 21, 2013
H. S. Teoh
November 21, 2013
is there a keyword like exit, that i can call  in any function to force the code to exit with a particular status to the shell?

I tried the word exit itself, it did not work
November 21, 2013
On Thursday, 21 November 2013 at 19:27:51 UTC, seany wrote:
> is there a keyword like exit, that i can call  in any function to force the code to exit with a particular status to the shell?
>
> I tried the word exit itself, it did not work

C's exit function should be available to you if you
import std.c.stdlib;
November 21, 2013
On Thu, Nov 21, 2013 at 08:38:18PM +0100, Kelet wrote:
> On Thursday, 21 November 2013 at 19:27:51 UTC, seany wrote:
> >is there a keyword like exit, that i can call  in any function to force the code to exit with a particular status to the shell?
> >
> >I tried the word exit itself, it did not work
> 
> C's exit function should be available to you if you
> import std.c.stdlib;

That works, but bypasses D runtime cleanup functions.

My workaround is to make use of the exception system:

	class ExitException : Exception {
		int status;
		this(int _status) {
			super("Program exit");
			status = _status;
		}
	}

	// never returns
	void exit(int status=0) { throw new ExitException(status); }

	int main(string[] args) {
		try {
			// actual code here
			...
			exit(1); // should exit with status 1
			...
		} catch(ExitException e) {
			return e.status;
		} catch(Exception e) {
			// do your usual exception handling here
		}
		return 0;
	}

It's kinda ugly, but you could encapsulate this in a custom library: say
rename main() to dmain(), then have the library provide the actual
main() with the try-catch block, and possibly with some other niceties
as well. Then you could just use this library in all your programs.

The use of exceptions may slow things down a bit, but at program exit time, that's really the least of your concerns so it shouldn't matter at all.


T

-- 
Latin's a dead language, as dead as can be; it killed off all the Romans, and now it's killing me! -- Schoolboy