From: "John M. Aldrich" Newsgroups: comp.os.msdos.djgpp Subject: Re: 2 quick questions Date: Fri, 14 Aug 1998 22:36:33 -0400 Organization: Two pounds of chaos and a pinch of salt. Lines: 72 Message-ID: <35D4F431.F5D956B8@cs.net> References: <35D4F001 DOT 4A3E2B2D AT xyz DOT net> NNTP-Posting-Host: ppp102.cs.net Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk Bjorn Hansen wrote: > > 1] what does the exit code tell you? The exit code is a tool used by the operating system to get information from programs. On a DOS system, the exit code is a 1 byte value that is stored in the %ax register when your program terminates. This code is made available by the operating system to the application that called your program. Examples of use: In DOS batch files, the "IF ERRORLEVEL ##" command allows you to test the exit code of a program to do different things. One common use is with the 'choice' utility that comes with DOS 6.0 and higher. It is a standard convention to use the exit code to indicate if a program ran successfully. Programs written according to this convention return a zero exit code if they ran correctly, and a non-zero exit code to indicate some form of failure. Applications can then test the exit code to determine what to do next. A prime example is GNU Make, which, by default, will abort running a makefile if any command returns a nonzero exit code. Now, how does it work? In C, the return value of the main() function is used as the exit code of a program. The ANSI standard states that main() must be declared to return an integer. It is then conventional to terminate your program with a 'return 0;' (many prefer 'return EXIT_SUCCESS;' for its greater clarity - that macro along with EXIT_FAILURE is defined in ) statement to indicate that it ran without problems. If an error does occur, such as failure to allocate memory, you may terminate your program with the exit() function, passing it the exit code to use. The common convention is 'exit(1);' or 'exit(EXIT_FAILURE);'. This can be done anywhere in your program. It's common for C/C++ books and instructors to gloss over the exit code and return value of main() because it's "too advanced" or "not relevant" or can be skipped as a "shortcut." In fact, it's a required part of the C language. > 2] why does the compiler have a warning message if you don't use a > caste? when you do something like this > > int i; > int *ip; > ip=i; > > instead of this > > int i; > int *ip; > ip=(int *)i; It complains because assigning any non-pointer type to a pointer is very likely to be a mistake. It is only in very rare cases that it's actually necessary to do, and in those cases you should use a typecast to let the compiler know that it's ok. The function of most warnings is to let you know when you're doing something that is not precisely incorrect, but could (or is likely to) cause abnormal or erroneous program behavior. Hope this helps! -- --------------------------------------------------------------------- | John M. Aldrich | "Money is truthful. If a man speaks | | aka Fighteer I | of his honor, make him pay cash." | | mailto:fighteer AT cs DOT net | | | http://www.cs.net/fighteer/| - Lazarus Long | ---------------------------------------------------------------------