C Programming

Jeff Vian jvian10 at charter.net
Mon May 10 03:48:03 UTC 2004



fredex wrote:

>On Sun, May 09, 2004 at 08:34:28AM -0500, Jeff Vian wrote:
>  
>
>>fredex wrote:
>>    
>>
>>>On Sat, May 08, 2004 at 10:46:37PM -0400, Wade Chandler wrote:
>>>      
>>>
>>>>Gene Heskett wrote:
>>>>        
>>>>
>>>>>On Saturday 08 May 2004 06:27, Trevor McNamara wrote:
>>>>>          
>>>>>
>>>>>>Hello,
>>>>>>            
>>>>>>
<snip>

>>>Not to be a negative-sounding force here, but I would urge you to NOT
>>>ever use any of Herbert Schildt's books.
>>>
>>>Mr. Schildt is a skillful writer, his writing is clear and lucid. He
>>>writes books on C and  C++ that very easily and clearly lead you down
>>>the path to writing programs that are WRONG. he teaches bad practice in
>>>C and C++ in clear and easily understood ways, such that if you follow
>>>his advice you will learn his bad habits. one minor example is that he
>>>is one of the many people who incorrectly teach that it is permissible
>>>to declare main() as being of type void:
>>>	void main (void)
>>>		{
>>>		...
>>>		}
>>>A little web searching, or spending a little time on groups.google.com
>>>reading comp.lang.c will find you plenty of examples of why his books
>>>are not a good way to learn C or C++. You can learn, in the same way,
>>>of many other books that do teach the language(s) correctly.
>>>
>>>
>>>      
>>>
>>Please explain why main cannot be of type void.
>>    
>>
>
>1. Because the ANSI/ISO standard for the C language requires that main
>returns int.
>
>2. And if that isn't good enough for you, if you don't care about
>standards, look at the practical implications. When you write a function:
>
>  
>
I expected a reasoned discussion, not flaming.

<snip>

>>While I agree main is most often typed to int for the purpose of 
>>returning a value designating completion with no errors or an error, 
>>there is no *requirement* for that.
>>    
>>
>
>ah, but there is. Again, the language standard requires that main return
>an integer.
>
>
>So "why", you ask, "does the standard require main to return int?".
>The original C standard was written to "codify existing practice". In many
>environments (Unix, MS-DOS, probably other platforms) the return value of 
>main is (or can be) used by the invoking program as a success or fail
>status indicator. If the program doesn't return such a value the calling
>program has no way to find out if hte program ran successfully or not.
>  
>
true

>True, you CAN write a broken program that doesn't return anything from
>main, but it's still going to hand back SOME value to the invoking program
>as its status. if you don't provide a value, the code that calls main is
>going to return something anyway, most likely some garbage/arbitrary
>value it picked up from the place main's return should have been, but 
>wasn't (since main is expected to return something but didn't).
>
>Understand, main() is NOT the first code to execute when a C program is
>invoked. There's a chunk of "startup code", that is provided by the 
>compiler vendor or a linkable library (invisible to the user) that
>actually is invoked first, before main(). This code may do little in some
>environments, or in other environments it may do a great deal of
>stuff. But whatever it does, it (among other things) hands main its two
>arguments, and receives an integer back from main. Changing the type of
>main in your program does not change this code.
>
>
>  
>
>>If you can provide *definitive documentation* of your statement that his 
>>teaching is wrong in the requirements for function main() I would like 
>>to see it.
>>    
>>
>
>See the language standard document.
>  
>
I did look at that, all 550 pages of it.

>Or go ask this question in the newsgroup comp.lang.c where you'll either
>be ignored as a troll, or else will get flamed, depending on the mood
>this week.
>
>Mr. Schildt, for all his skill as a writer (and he is good, no denying
>that!), is one (of many) people who perpetuate the myth that it's OK
>to play fast and loose with the language standard. The result is that
>so many people think that it IS OK to do so. But some day, somewhere in
>the future, doing one of these things he teaches will nail your program
>to the wall and you won't have a clue why it went wrong.
>  
>

This as certainly not the first author of programming books to violate 
the standards in his methods.  I first learned C in the days of 
Borland's Turbo C compiler, (taught at Drexel University in 
Philadelphia), and the text book used in that class also ignored the 
return type of main().  ( yes, I still have the text and verified this )

Are you planning to be this hostile about ALL books that you don't 
happen to like.?

Your point would be much better made without hostility, but reasoned 
agrument instead.  I noted where the standards define main and I am 
satisfied with that.  All I originally asked for was the location where 
it was defined that way, not a hostile diatribe.







More information about the users mailing list