Archive-name: C-faq/learn-c-cpp-today Last-modified: Tuesday - August 01, 1995 Copyright (c) 1995 Vinit Carpenter All rights reserved Introduction: ------------- This is a list of a few C and C++ language tutorials available to a user. This list includes interactive tutorials, public-domain code collections, books etc. I've developed this FAQ purely as a volunteer effort as a service to the Internet community. Although every effort has been made to insure that all the information here is as accurate as possible, no guarantee is implied or intended. I welcome comments, suggestions or criticism for all the people out there on the net that read this. If you can help me make this list a little better, you will be helping a lot of people out there on the net. I am a horrible writer and an even worse speller. If you find any errors or would like to suggest any additions please feel free to email me at the address below: [email protected] What's new in this issue: ------------------------- This section of the document will point out all the new additions, corrections, updates etc. If there is enough interest, I will start producing a 'diff' version. 1. Added a second web server that has the HTML and PS version of this document. 2. Updated the information on the 'C++ on the WWW'. The address has of the web server has changes. The author also converted Dordill's C++ course to HTML which is online. 3. Updated the information in the MSDOS/Windows compiler section. 4. Added a new item called `Programming in C' that contains a great collection of C and programming items. 5. Updated the information on the C++ FAQ. 6. Added a lot of information on OS/2. (Joe Dougherty) 7. Added more information about Scott Meyers new book titled "More Effective C++". 8. Updated the oak.oakland.edu info and the directory structure has been changed. 9. Update the information on the C Snippets packages. The author released a new package that includes 400+ files. I am switching to URL in place of the standard ftp and filename format. URL stands for "Uniform Resource Locator". Think of it as a networked extension of the standard filename concept: not only can you point to a file in a directory, but that file and that directory can exist on any machine on the network, can be served via any of several different methods, and might not even be something as simple as a file: URLs can also point to queries, documents stored deep within databases, the results of a finger or archie command, or whatever. File URL: --------- file://oak.oakland.edu/simtel/msdos/c/00_index.txt Gopher URL: ----------- To connect to a particular gopher server, use this URL: gopher://gopher.tc.umn.edu/ News URL: --------- To point to a Usenet Newsgroups, the URL is simply: news:comp.lang.c HTTP URL: --------- HTTP stands for HyperText Transport Protocol. HTTP servers are commonly used for serving hypertext documents http://vinny.csd.mu.edu This file is posted on the 1st and the 15th of each month to the Usenet Newsgroups COMP.LANG.C, COMP.LANG.C.MODERATED, COMP.LANG.C++, NEWS.ANSWERS & COMP.ANSWERS. The HTML and postscript version of this documents are available. Here's the URL: http://vinny.csd.mu.edu NOTE: This is my Linux PC that does get inundated with request. The last time I checked the stats, there were about 27 connections every minute. If you get timed out, please try again. The most recently posted version of this document is kept on the news.answers archive on rtfm.mit.edu. You can receive it via anonymous ftp. The URL is listed below. ftp://rtfm.mit.edu/pub/usenet/news.answers/C-faq/learn-c-cpp-today If you don't have access to ftp, you can also receive this file via e-mail by sending mail to [email protected] with: send /pub/usenet/news.answers/C-faq/learn-c-cpp-today in the body (not subject line) of your message. You can also receive the latest version via electronic mail by e-mailing me. To: [email protected] Subject: send learn-c-cpp-today Body: ignored. Can be blank. A lot of tutorials discussed here are available via anonymous ftp. If you don't have ftp, you can also retrieve these files via a ftp-email gateway. To retrieve files via e-mail, send mail to [email protected] with the command HELP in the body of the message to receive a complete list of all commands. A typical message would look something like this: connect oak.oakland.edu chdir /simtel/msdos/c binary uuencode get xxx.zip quit Some of the items discussed here are platform-dependent, but most of the items are applicable across all platforms (portable). If you have any comments, suggestions, complaints, additions, etc, please feel free to e-mail me at the following address: [email protected] If you are working on a tutorial or would like something added to this list, please e-mail me at the address given above. The Origins of C and C++: ------------------------- The 'C' programming language was originally developed for and implemented on the UNIX operating system, on a DEC PDP-11 by Dennis Ritchie. One of the best features of C is that it is not tied to any particular hardware or system. This makes it easy for a user to write programs that will run without any changes on practically all machines. C is often called a middle-level computer language as it combines the elements of high-level languages with the functionalism of assembly language. C allows the manipulation of bits, bytes and addresses- the basic elements with which the computer functions. Another good point about C is its portability which makes it possible to adapt software written for one type of computer to another. C was created, influenced, and field tested by working programmers. The end result is that C gives the programmer what the programmer wants. C offers the speed of assembly language and the extensibility of FORTH, but few of the restrictions of Pascal and Modula-2. C++ is an enhanced version of the C language. C++ includes everything that is part of C and adds support for object-oriented programming (OOP). In addition, C++ also contains many improvements and features that make it a "better C", independent of object oriented programming. C++ is actually an extendible language since we can define new types in such a way that they act just like the predefined types which are part of the standard language. If you just use C++ as a better C, you will not be using all of its power. Like any quality tool, C++ must be used the way it was designed to be used to exploit its richness. Some of the new features include encapsulation, inline function calls, overloading operators, inheritance and polymorphism. I am not going to explain what they mean here as that would simply take me away from my purpose here, but you can refer to any good C++ book or the C++ FAQ (Item 7) for more information. What do you need to get started? -------------------------------- The first thing you need is a compiler. A compiler reads the entire program and converts it into object code, which is a translation of the program source code into a form that the computer can execute directly. UNIX SYSTEM: Type cc at the % prompt. If you don't get any error messages, you probably have a C compiler . If you get an error message, try acc, gcc or g++. If any of these don't work, contact your local system administrator and ask him/her to get you a C/C++ compiler. GNU C/C++ compiler is available from a lot of anonymous ftp sites free of charge. Look into it. (I've got g++ running on my Linux box without any problems) MSDOS/Windows/OS2/Linux (IBM COMPATIBLES): There are a lot of good compilers available to you. Microsoft Quick C and Borland Turbo C/C++ are both good products for beginners. You can buy both of them for under $50.00. I use Microsoft Quick C and MS-Visual C/C++, and I prefer Quick-C for all my DOS programs as it is small, and yet very powerful. Most of my programming is now on my Linux PC with gcc/g++. (If you want a great 32 bit operating system, you should look into Linux. E-mail me for details). You can also get the DOS port of GNU C/C++ called DJGPP from oak.oakland.edu /simtel/vendors/djgpp. The increased popularity of OS/2 and it's latest incarnation Warp, has provided programmers with a wider selection of compilers and programming tools. Still available for free is the GNU gcc package under the name emx. Emx integrates nicely with the Extended Editor included with OS/2. It's available on ftp.cdrom.com, hobbes.nmsu.edu, and other sites. IBM provides the CSet++ 2.x, as well as a smaller, less-expensive package on CD-ROM called CSet++ First Step. Other popular compilers include Borland C++ 1.0 for OS/2, and Watcom C/C++ for OS/2 10.0, and CA-C++ for OS/2 from Computer Associates. OpenVMS (VAX & AXP) If you're on a VAX, type in CC to check and see if you have a C compiler. VAX C is not the best compiler around, but it certainly does the job. If you don't have a C compiler, look into the GNU C/C++ compiler GCC. You can get the VAX version of GCC from ftp.spc.edu via anonymous ftp. If on a AXP system, you should have access to DEC C/C++. Please contact your local system administrator or computer consultant for more site specific questions. Macintosh (Apple/PowerMac) There are three main players in the Mac compiler market: MPW (from Apple), THINK C / Symantec C++ (both from Symantec), or CodeWarrior (from Metrowerks): THINK C is $225 (only a C compiler), while Symantec C++ is $375 (includes C and C++ compilers). CodeWarrior comes in two versions: bronze and gold, at $199/299/399, respectively. The Symantec C++ compiler (ver 8.0) is PowerMac native. Symantec and Metrowerks offer academic pricing on their products which are substantially less than the commercial prices. There have been two attempts at freeware/shareware Mac C compilers: Sesame C and Harvest. Harvest C was an ambitious attempt at a production-quality freeware compiler which was later abandoned by the author. Tutorials: ---------- 1) Title: A C tutorial. Filename: C-LESSON.ZIP Author: Christopher Sawtell. E-mail: [email protected] URL: ftp://garbo.uwasa.fi/pc/c-lang/c-lesson.zip This tutorial contains a complete course for you to learn the 'C' computer language itself. Some knowledge, of computers and the jargon is assumed, but complicated concepts are fully explained. This tutorial is geared towards the UNIX operating system, but everything discussed here applies across all platforms. Most of the source code included here compiles under all the platforms. This is a good effort and is worth your time. Updates to this tutorials are posted to the USENET group comp.lang.c. 2) Title: Coronado;s Generic C tutor v2.0 Filename: GENCSRC.ZIP GENCTXT.ZIP Author: Gordon Dodrill E-mail: -- URL: ftp://oak.oakland.edu/simtel/msdos/c/gencsrc.zip ftp://oak.oakland.edu/simtel/msdos/c/genctxt.zip This is one of the most complete tutorials out there. Once again, most of the items covered here are apply across all platforms. There are some items discussed here that are DOS dependent. The tutorial includes a manual that covers all the aspects of the C language. The archive also includes a huge collection of C code that is discussed in this tutorial. The best way to learn anything is by practical application and this tutorial does just that. A payment of $10.00 is requested by the author if you find the tutorial helpful, but the payment is not required. I think you should send in the $10.00 as a lot of time and effort went into this project. 3) Title: Thread An On-Line C Help File V 1.01 Filename: THREAD.ZIP Author: Fran Horvath E-mail: -- URL: ftp://oak.oakland.edu/simtel/msdos/c/thread.zip Thread is a C language help utility. It was written by a member of the U.S.D.A. Grad School faculty to help students learning the C language. Thread is a variable record-length database, together with an index, that enables the fast lookup and display of C keywords, standard library functions, and other items. There are a few important functions missing from this help utility, but it is still a pretty good resource. Give it a shot. 4) Title: Collection of C-Snippets Filename: SNIP9503.ZIP Author: Bob Stout E-mail: [email protected] URL: ftp://oak.oakland.edu/simtel/msdos/c/snip9503.zip This is the March 95 release of SNIPPETS which is a public domain/freeware portable C source code & instructional text. According to the author, the 1.6 MB archive contains over 400 files and approximately 35% of it is PC-specific. The rest of it is completely portable. The PC-specific functions are system-level utility code with no multimedia or GUI code. This archive has been tested on all popular PC compilers and gcc, SCO, and HP/UX compilers where possible. An eclectic collection containing everything from macros to complete cut-and-paste C code solutions & utilities, along with FAQ and instructional files. There is a piece of code for every single task starting with macros to complete cut-and-paste C code solution and utilities, along with some frequently asked questions and instructional files. This archive is a must for every programmer. If you already have a copy of snip9404.zip, see snpd9503.zip which includes the diff needed to upgrade to snip9503.zip. Numerous bug fixes and enhancements were made in this archive and 60 New files added. This is Public Domain/freeware created by the archivist, ex Fidonet C_Echo moderator and author, Bob Stout 5) Title: COMP.LANG.C FAQ Filename: FAQ Author: Steve Summit E-mail: [email protected] URL: ftp://rtfm.mit.edu/pub/usenet/news.answers/C-faq/faq The FAQ (Frequently Asked Questions) is a compilation of frequently- asked questions of the usenet group, COMP.LANG.C along with the answers. Steve's put in a lot of work and this compilation shows it. I found that the FAQ answered a lot of my questions. I even learned a lot of new things browsing through the document. I think this FAQ should should be on your computer desk right next to a good C programming book. The FAQ is posted to COMP.LANG.c and news.answers every month along with the diff version. 6) Title: TUTOR v3.10 Filename: CTUTORDE.ZIP Author: Gordon Dodrill E-mail: [email protected] URL: ftp://oak.oakland.edu/simtel/msdos/c/ctutorde.zip This is an educational learning tool which helps expedite the difficult process of learning the C Programming Language. It includes a tutorial, style guide, and interactive quiz program all integrated together in one program. The tutorial covers both K&R version of C and ANSI C. One of the biggest limitation of this tutorial is that it is only available for DOS computers. 7) Title: Programming in C Filename: CE.html Author: Dave Marshall E-mail: [email protected] URL: http://www.cm.cf.ac.uk/Dave/C/CE.html This is one of the best C programming tutorials out there on the World Wide Web (WWW). See tutorial #11 for more information on the web and tools to access the web. This tutorial starts out with some basic ideas and then extends to some more advanced features of C. With the popularity of the World Wide Web, items on the web servers are going to be very popular. This is really a great tutorial and worth checking out. Some of the items discussed here are loops, arrays, string manipulation, pointers, dynamic memory allocation, I/O, UNIX, C preprocessor and some exercises. While you're out there, check out Ceilidh, the online C tutoring system. 8) Title: ANSI C for Programmers on UNIX systems. Filename: love_C.ps.z, love_C.shar Author: Tim Love E-mail: [email protected] URL: ftp://svr-ftp.eng.cam.ac.uk/pub/misc/love_C.ps.Z This is a really nice C tutorial geared towards people on UNIX system as the title would suggest. This document introduces C by providing sample programming tasks. One of the good things about this tutorial is that all the source code included is ANSI compliant. This tutorial also includes programming exercises to aid or gauge your progress as you go through the material (answers included in back). The tutorial covers some of the basics such as functions, pointers and string manipulation followed by some programming examples to apply the items you've just learned. There is also a section on memory allocation that illustrates the use and dangers of malloc. The section on the Make utility helped me a lot as I really don't like make and makefiles. The section of debugging is also extensive and has some great tips. The appendix of this tutorial also has a section of converting from K&R to ANSI C. Really great job and well worth the checking into. 9) Title: Coronado Enterprises C++ Tutorial (v2.20) Filename: CPTUTS22.ZIP CPTUTT22.ZIP Author: Gordon Dodrill E-mail: -- Phone: (505) 293-5464 URL: ftp://oak.oakland.edu/simtel/msdos/cpluspls/cptuts22.zip ftp://oak.oakland.edu/simtel/msdos/cpluspls/cptutt22.zip Just like its C counterpart, this is really one of the best and most complete C++ tutorial out there. This tutorial is not for the person just starting out in programming as C++ is not an ideal first language. But if you are familiar with C or any other programming language, this tutorial will get you started with C++. All the source discussed in this tutorial is included and learning is really accelerated as you can compile the code while you are reading about it. This tutorial will assume a thorough knowledge of the C programming language and little time will be spent on the fundamental aspects of the language. Special attention has be devoted to explaining the newer additions as provided by the ANSI-C standard, as many programmers are used to the old K&R school of thought. 10) Title: COMP.LANG.C++ FAQ Filename: FAQ Author: Marshall P. Cline, Ph.D. E-mail: [email protected] URL: ftp://sun.soe.clarkson.edu/pub/C++/FAQ Wow!!! That's really all I can say about this collection of questions and answers for C++ and Object Oriented Programming (OOP). This is the complete FAQ for the Newsgroups COMP.LANG.C++ compiled by Dr. Marshall Cline. I have been programming in C++ for a few months and am far away from being an 'expert', and this compilation helped me enormously. Once again, this is not for the person that is starting to learn C++, but if you've already taken the first step, this FAQ is for you. If you don't have ftp, you can also receive it via e-mail by sending a message to [email protected] with the subject `send C++/FAQ'. The C++ FAQ has been released as a book called `C++ FAQS -- Frequently Asked Questions' by Addison-Wesley. The book is a complete re-write and contains about 5 times the material that is indexed and cross referenced. Check out the book section for a review of the book. The FAQ will still be posted in the Newsgroup comp.lang.c++, but if you find the FAQ helpful, you should really buy the book. 11) Title: C++ on the World Wide Web Filename: C++.html Author: Marcus Speh E-mail: [email protected] URL: http://uu-gna.mit.edu:8001/uu-gna/text/cc/index.html This is one of the award wining courses at the 1st WWW conference (congratulations Marcus. great job). One of the newest addition here is the Dorill C++ course converted to HTML. There is a wealth of information on C++ available on the World Wide Web (WWW). The World Wide Web (WWW) is a wide area hypermedia information retrieval system that gives the user universal access to a large universe of documents. One of the most popular to the Web is called Mosaic developed by NCSA. Mosaic is an Internet based global hypermedia browser that allows you to discover, retrieve and display documents and data from all over the world. Global hypermedia means that information located around the world is interconnected in an environment that allows you to travel through the information by clicking on hyperlinks-- terms, icons or images in documents that point to other related documents. Here's the URL (Uniform Resource Locator) for the C++ Virtual Course. http://uu-gna.mit.edu:8001/uu-gna/text/cc/index.html You might also want to connect to info.desy.de and browse. I found a lot of great items such as documents and sources on C++ and Object oriented programming, Internet groups for discussions and questions on C++, discussion of Object-Oriented Literate Programming and many other postscript papers. http://info.desy.de/general/users.html 12) Title: Programming in C Filename: index.html Author: Jutta Degener E-mail: [email protected] URL: http://www.lysator.liu.se/c/index.html This is really one of the best collection of C related items out there on the World Wide Web maintained by the Lysator computer society, an association of computer science students at Linkoping University, Sweden. Here's a list of some of the items. There is a great section on ANSI C, reviews of 3 books and a list of errata from 2 books. There is a very interesting paper called `A development of the C language' by Dennis Ritchie that traces the origin of the language we know and love today. There is a HTML version of Kernighan's historical "Programming in C: A Tutorial" from 1974 (that describes an early version of C, four years before K&R. WARNING: DO NOT USE THIS DOCUMENT AS A TUTORIAL); also included are the "Ten Commandments for C Programmers (Annotated Version)" and a HTML version of Steve Summit's comp.lang.c FAQ. 13) Title: C++ Annotations (ver 3.3.3) Filename: cplusplus.html Author: Frank Brokken & Karel Kubat E-mail: [email protected], [email protected] URL: http://www.icce.rug.nl/docs/cplusplus/cplusplus.html This web based tutorial is intended for knowledgeable users of C who would like to make the transition to C++. This document presents an introduction to programming in C++. It is a guide for programming courses taught at State University of Groningen This document is not a complete C/C++ handbook, but rather serves as an great addition to other documentation sources. The reader should take note of the fact that an extensive knowledge of the C programming language is assumed and required. This document continues where topics of the C programming language end, such as pointers, memory allocation and compound types which makes it a very good programming guide. I highly recommend this tutorial to any individual who is really interested in becoming extremely knowledgeable on C++ and a proficient programmer. Here is a listing of the chapters. 1. Introduction to C++ 2. A first impression of C++ 3. Classes 4. Classes and memory allocation 5. Static data and functions 6. Inheritance 7. Polymorphism, late binding and virtuality 8. Concrete examples of C++ 9. Templates 14) Title: C programming reference 1.1 Filename: cref.html Author: Martin Leslie E-mail: [email protected] URL: http://vinny.csd.mu.edu/martin/DOC/C/cref.html This is not an ordinary C language tutorial, rather it is a great reference guide for the C programming language. As the author states, "I have found several C tutorials and lessons on the net but no reference documents. This is not an attempt to replace the many high quality books available, but does try to provide an on-line reference that can give answers to questions quickly and without hassle". Martin has put a lot of work in this and the archive is definitely worth checking out. One of the nicest item is the `Function Quick Reference'. It is a summary of a lot of useful functions including ANSI standard functions, Non Standard functions from CONIO.H, non Standard UNIX functions, user written functions and variable length argument lists including the library, prototype, syntax and example programs. Here's a sample. FGETC/GETC FUNCTION 08-MAY-94 fgetc and getc both read a character from a file (input stream) and have the same syntax. They are for all intents and purposes the same! Library: stdio.h Prototype: int fgetc(FILE *stream); Syntax: ch = fgetc(file_pointer); ch = getc(file_pointer); [IMAGE] example program. See also: getchar, fgets, gets getch, getche (non standard) And if you're really nice to him, he will give a really cool program to randomly change the root window color on X Displays. :) The program randomly selects a target color and then performs a basic interpolation to move from the current color to the target color. When the target has been reached, a new target is selected and the process is repeated. Books currently being reviewed: ------------------------------ If you have any thoughts or comments, please feel free to e-mail me at [email protected] 1. C++ A Pratical Introduction by Brian Hahn (ISBN 1-85554-325-7) 2. C++ For Dummies by Stephen R. Davis (ISBN 1-56884-163-9) 3. The Craft of C: Take Charge Programming by Herbert Schildt (ISBN 0-07-881882-6) 4. C By Discovery by L.S.Foster (ISBN 1-881991-29-6) 5. Teach yourself C++ programming in 21 days by Jesse Liberty (ISBN 0-672-39541-0) Books: ------ [1] "The C Programming Language" (2nd ed.) Brian W. Kernighan & Dennis Ritchie Prentice Hall ISBN: 0-13-110362-8 This is the second edition of the original Kernighan & Ritchie (K&R) text. This book is commonly referred to as the New Testament as it includes the modifications incorporated by the ANSI standard, while retaining the nature of the 1st edition. This book assumes that the reader has some basic programming knowledge. So if you're just starting to program and C is the first language, this might not be the ideal book. This is one of THE BEST books on C and a must have, especially if you're starting your own little programming library. A good book to go along with K&R's "The C Programming Language" is "The C Answer Book" by Clovis L. Tondo and Scott E. Gimpel, Prentice Hall, subtitled 'Solutions to the Exercises in The C Programming Language, second edition by Brian W. Kernighan & Dennis M. Ritchie', ISBN 0-13-109653-2 [2] "Programming in ANSI C" (Revised edition: 1994) Kochan, Steven SAMS Publishing ISBN 0-672-30339-6 This book by Steve Kochan is absolutely the best book for anyone starting out programming in C. This is an excellent introductory text with frequent examples and good text. This book makes no assumptions about the particular computer system or operating system on which the C language is implemented. This books is written for novices and experienced programmers alike. I love this book as the comprehensive 'teach by examples' book can help you master the unique features of the C language. There is complete coverage of program looping, decision making, arrays, strings, pointers and bit operations and helpful end-of-chapter exercises. This is the book I used to learn C and it really is a great book. The K&R book is really great as a reference, but not as the first book. [3] "Expert C Programming: Deep C Secrets" Peter Van Der Linden SunSoft Press. (ISBN 0-13-177429-8) Peter has written one of the greatest books to hit the computer book stands in a long time! This is not your typical C book, but is rather a fun book to read. As I told Peter, most C programming texts are really boring as all they do is describe the functions, give a abstract example and then move onto something different. This book is chock full of real world C stories and folklore, including a story about the C bug that brought down the AT&T network. I found the tongue-in-cheek attitude and real world examples/stories very, very interesting. Run, don't walk, down to your local store and buy this book. I really really loved this book, and I read most of it in one sitting. There is also a great introduction to C++ for C programmers that will get you started with C++ and Object-Oriented programming. This book is not for beginners, but is a great second book on C. Expert C Programming is also ideal for those C programmers who want to move to C++. According to the author, the book puts the "fun" back in "functions" :) [4] "C: The Complete Reference" (2nd ed.) Schildt, Herbert. Osbourne/McGraw-Hill. (ISBN 0-07-881538-X). This is a pretty good C language reference book. I am more partial to the Microsoft C Bible as a reference but this is not a bad book at all. If you're a beginning C programmer or a seasoned pro, the answers to most of C questions can be found in this one-step resource. This book presents an extensive summary of C library functions defined by ANSI and many common extensions including UNIX. [5] Absolute Beginner's Guide to C Perry, Greg SAMS Publishing. ISBN 0-672-30341-8 This is a absolutely beginner's book. If you have never programmed before, this book is for you. No knowledge of any programming concept is assumed. I like the fact that this book talks to you at your level without ever talking down to you. This book does not try to overwhelm the beginners with a lot of technical details while emphasizing introductory principles. If you've never programmed, this is the book for you. If you are familiar with programming, I would suggest either 'The C programming language' by Kernighan & Ritchie or 'Programming in ANSI C' by Kochan. [6] Microsoft C Bible. 1990 (2nd ed.) Waite Group Staff. Howard W. Sams & Company. ISBN 0-672-22620-0 This book is a must for every programmer, especially those who program in the DOS environment. The Bible organizes and simplifies the information contained in Microsoft's C library. Each function page gives the purpose, syntax, example call, includes, common uses, returns and examples. The book also has compatibility check boxes, so you can be sure your program compiles with the Microsoft C v5.0-7.0, Microsoft Quick C, Borland Turbo C and UNIX system V compilers. [7] Programming C in 12 Easy Lessons Greg Perry ISBN:0-672-30522-4 Sams (1st edition, 4/94) Reviewed by: Don Lockhart ([email protected]) In a nutshell: This book is very well thought out. It is very clear and easy to follow for the new user. It categorizes information into Notes, Tips, Warnings, and starts each lesson with an overview of the concepts to be presented as well as a review of them at the end of each lesson. Sidebars are also presented with useful relevant information. When new terms appear a definition of them appears in the page margin to further explain their usage. Each lesson ends with some practice "homework" and "extra credit" work to further enhance what you've just learned. In the front of the book, there's a tear-out reference card with C functions, operators etc on one side, and Turbo C++ editing keys and functions on the other side. In the back of the book there's an offer for Borland C++ 4.0 or full blown Turbo C++ at "discount rates". All lesson coding is also pre-typed on the included diskette. Also on the disk you'll find the answers to all the homework as well as a "lite" version of Borland's Turbo C++ compiler. Differences from ANSI C to C++ are always noted. I have been "threatening" to learn C for a couple of years. This book has quickly taken me from the sidelines to diving in head first, and actually gotten me excited about it. The info is well presented, and I haven't come up with any questions yet that I have not been able to find the answer in the book. I'm not 100% sure, but I believe when I was at the book store there is also a sequel to this book that even gets into more of actually developing applications using C. [8] Teach Yourself C++ 1992 Herbert Schildt Osborne McGraw-Hill. ISBN 0-07-881760-9 Teach Yourself C++ is another great book from Herbert Schildt who is more popular for his great C books. This book is especially designed for programmers who already know how to program in C. Based on a 15-minute lesson format, this book includes a lot of exercise and skill checks to make sure your programming abilities grow by each chapter. This book is really the perfect introductory guide for anyone who already knows how to program in C. According to my sources, this book is currently under revision. There are several items missing from this book as it was written before C++ was finalized. I still think it is a pretty nice book. [9] The C++ Programming Language (2nd edition) Bjarne Stroustrup Addison Wesley (ISBN 0-201-53992-6) Bjarne Stroustrup is the designer of C++ and has written 2 great books on C++. This book is divided into three parts: The first part provides a tutorial introduction to C++. The second part presents a discussion of design and software development issues arising in connection with the use of C++ and the third part is a complete reference manual. With the popularity of C++, several independent distributions of C++ have come forward, but the book discusses 'pure C++;' that is, no implementation dependent extensions are used. I have been programming in C++ for a while and yet found this book very helpful. One of the best way to learn a programming language is by writing small programs relevant to the item you study. There are exercises at the end of each chapter to test/apply what you learned in that particular chapter. This wasn't the book I used to learn C++ and I only recently got it from DEC [DEC ships this book with their C++ compiler in lieu of real documentation :)], but I wish I had gotten it sooner. This is really a great book and worth every penny. There is also a book called "The C++ answer book" by Tony L. Hansen. (Addison-Wesley ISBN # is 0-201-11497-6) and it contains the solutions to the problems in "The C++ Programming Language" by Bjarne Stroustrup. [10]Using Visual C++ Shammas, Namir Que Corporation ISBN: 1-56529-626-5 A lot of people have e-mailed me asking for recommendation for a Visual C++/MS-Windows programming book and the one I use/recommend is 'Using Visual C++'. This book is aimed at readers who are already familiar with C++ and Windows. This book covers many programming topics that use C++ and the Microsoft Foundation Classes (MFC). This book starts with an overview of the Visual C++ workbench and the MFC hierarchy. The book also discusses the AppWizard, ClassWizard and App Studio utility. This book really lets you take full advantage of the C++ compiler and all the utilities that come with it. Microsoft provides a lot of great information with the compiler package, but I found it hard to look through 20 different manuals to find some basic information. By the time you finish this book, you will be ready to create your own MS-Windows applications. Windows programming is pretty complex, but this comprehensive guide shows you efficient and proven techniques to build powerful applications. Another great book is 'Visual C++: A Developer's Guide' by Alex Leavens. (ISBN 1-55851-339-6) This book explores the comprehensive set of programming tools that come with Visual C++. This book shows you how to take advantage of MFC, OLE 2.0, add sounds to various Windows systems events and creating icons, cursors and bitmaps images. [11]C++ Primer (2nd edition) Lippman, Stanley B Addison Wesley ISBN 0-201-54848-8 The C++ Primer is a great book and will make learning C++ a joy. This really is one of the best books C++ book out there, but it assumes a lot of familiarity with programming concepts and a proficiency in C. Everyone I know who uses C++ recommends this book very highly. If you are interested in learning more about Object Oriented Program, you might consider buying "Object Oriented Design" by Peter Coad and Edward Yourdon" (ISBN 0-13-630070-7) [12]"C++ FAQs: Frequently Asked Questions" Marshall P. Cline and Greg A. Lomow Addison-Wesley ISBN 0-201-58958-3 When I first heard about the book, it thought it would just be a reprint of the electronic version of the FAQ, but I was pleasantly surprised when I got my hands on the book (Thanks Deborah) This is no mere reprint. This is a *great great* book that contains answers to about 500 questions on programming, design, analysis and testing. This book is not for beginners, but for programmers who have figured out the syntax of the language, and are looking to implement them. If you have questions like "What is a class invariant?", "How should I use exceptions?", "What happens when a destructor is executed?", then this is the book for you. This is a very practical book that contains answers to some real-world programming questions that will really help anyone involved with software development. I just wish I had this book around when I was taking my C++ classes. Unlike other books, this book contains about 200 complete program rather than code snippets that leave you guessing about the implementation. This book is a definite gem and should be in every single programmers library. Go out and buy 2 copies of this book: One for the office and one for the nightstand at home. [13]Learn C++ on the Macintosh Dave Mark Addison-Wesley ISBN 0-201-62204-1 This book comes with a customized version of Symantec C++ for the Macintosh. In addition, there is a coupon for obtaining the complete version of Symantec C++ at a much reduced price. I would recommend this book for those who are just beginning to program in C++; however, it does assume at least a working knowledge of C. There is a quick review of C at the beginning. Dave Mark also has a book 'Learn C on the Macintosh'. It has the same great style and comes highly recommended. Thanks Lizann Bolinger. [14]Effective C++ Scott Meyers Addison-Wesley ISBN 0-201-56364-9 This is just a great great book on C++ and is a must for every programming library. The book is a listing of things which you must get right if your program is to be safe and reliable, and a clear description of what it means to get them `right.' The book raises some very interesting issues that every programmer faces. C++ provides the structure and the means to talk about them in a concrete way and to program them explicitly. The author is working on another C++ book, and the title will be "More Effective C++. " Here's more information that the author posted in comp.lang.c++. If all goes according to plan, "More Effective C++" should be available around the end of September. As for the book itself, "More Effective C++" will use the same Item-based organization that I used in "Effective C++," but it will cover all new material, and it will not assume that readers have read "Effective C++." (If they have, so much the better, but it's not a prerequisite.) As such, "More Effective C++" isn't really "Effective C++, Volume 2," though it can be read that way, if you like. Like "Effective C++," "More Effective C++" will cover a variety of topics. One of those topics will be efficiency. The current draft contains at least 12 Items on that topic alone, and efficiency considerations comprise a thread that winds through many of the book's other Items, too. [15]Scientific and Engineering C++: An introduction with advanced techniques and examples John J. Barton and Lee R. Nackman Addison Wesley ISBN 0-201-53393-6 Reviewed-by: [email protected] (Ajay Shah) A plethora of books on C++ exists; the above promises to be a book on numerical computation in C++. The authors are both from T. J. Watson Research Center and they do numerical computation for a living. Before we get to what the book offers, we should clarify what it is not : It is not a Numerical Recipes. It does not discuss the mathematical ideas underlying numerical algorithms, and it presents no library which you can start off using from day 1. Instead the authors are attacking a different problem, that of applying OOP in its C++ incarnation to do numerical computation. The typical reader is expected to be someone who is currently getting his work done in C or Fortran and would like to migrate to C++. The authors literally start from scratch in this enterprise; they have two versions of chapter 1, one aimed at migrants from C and another aimed at migrants from Fortran. Does the book succeed in these objectives? For the major part, my answer would be Yes. I will address two issues here: o Teaching C++ and OOP This is done reasonably well. However, I expect anyone who actually plunges into C++ seriously will want the primary two books on C++ too (i.e. Stroustrup and Lippman). They do a good job of the overall question of applying OOP to scientific computation, but I have a guess that you would come up with a lot of this yourself, and that your sense of taste may differ from theirs to some extent. o Practical advice aimed at numerical computing applications I felt the book does really well on this score. They take up a series of problems and give us the benefit of their good taste in coming up with designs. The last chapter does maximum likelihood using automatic differentiation to obtain derivatives -- this is a lovely theme that has not been much explored in the literature. One of the big questions on the minds of anyone thinking about using C or C++ for numerical computation is the existence of libraries like linpack; they are incredibly ugly on the score of software engineering, but they are incredibly well done on debugging and efficiency. Between f2c and C++, it appears quite possible to hide these ugly (but working) beasts under nice modern interfaces. This issue is really important at a practical level, and so far I've only seen net.wisdom on the subject. The authors deal with it in detail. It would have been awfully nice if they had just given us a full C++ view to lapack :-) but their focus is on ideas, not on giving blackboxes of code. All the source code of the book is on the net. I'm personally at the stage of having browsed in C++ for a while now but not having taken the plunge of fully leaving C yet. This book feels very useful to me at this point in my transition. [16]C, A Software Engineering Approach Peter A. Darnell & Philip E. Margolis ISBN:0-387-97389-3 & 3-540-97389-3 Springer-Verlag Reviewed by: Klaas Teschauer ([email protected]) This is the book which was used in my C course. When I started the course I went to my local book shop and digged through the available books about C. This book was recommended by our teacher, but it was rather expensive and, if possible, I wanted to avoid the expense, But alas, I finally settled for it, because it was the most comprehensive and complete book on offer and it obviously contained many tips and hints not available elsewhere. The book is totally platform-independant, and covers all features of the language in detail. It is written for someone who already knows another programming language; as it is an arduous task to learn programming with C. It covers ANSI C as well; but the examples are written in K&R C. (BTW, here in Germany we sometimes expand this to "Knall und Rauch C", which means "Bang and Smoke C" when translated literally :). ) Apart from the explanation of the syntax and semantics of C and how the constructs are actually used, the book offers numerous so-called "Bug Alert" or "ANSI Feature" boxes, which point to common coding errors or explain relevant features of the ANSI Standard, respectively. At the end of each chapter a number of excercises are provided. Furthermore, the Appendix contains a complete reference manual for the ANSI runtime library and a number of concise discussions like differences between ANSI and K&R or reserved names and the like. The last regular chapter is an excellent introduction into software engineering issues. As an example serves a project for developing a C interpreter (well, it implements only a subset) and the complete source code of which is also provided in the appendix. It is in my opinion an outstanding book and worth every dollar. [18]Windows++ Paul Dilascia ISBN:0-201-60891-X Addison-Wesley Reviewed by: Klaas Teschauer ([email protected]) This book is not an introduction to C++, but it provides a breeze through the most important features for C programmers. The book describes the actual process of the development of a C++ class library for Microsoft Windows 3.1. It is a book about programming Windows in the first place, but I learned a lot from it how to design reusable classes and code. You still need another Windows introduction or reference manual like the Petzold(*). Although it is stuffed with code snippets, it is fun to read it, because the author writes in a more colloquial style. The language is like what he would have actually said to the reader if he and the reader were sitting in front of a PC and the author would explain it. Examples: ... It's been a long chapter (I warned you), ... ... Do I really have to mess with blocks and locks and heaps and free chains and all that low-level stuff?! Yecch!! The operating system is supposed to do that; OO programmers don't DO memory management! ... ... Since you have your OOP cap on (if not put it on now!), a little light bulb should go on in your head that says application object! ... The book is divided into chapters roughly along the different parts of the Windows API (GDI, etc.) that are encapsulated. Usually the author starts out with describing the implementation of a small application and then tries to extract all reusable code from the application in order to put it into the library. He not necessarily follows the one true path recommended by Microsoft, but tries to make the library as useful as possible for the applications that base on it. Where necessary, the book goes into reasonable details about Windows. The full source code of the library and of the applications developed along the way is supplied in the appendix, plus makefiles for Microsoft and Borland C/C++. The sources are also available on diskette from the author. During the course of the book, he also provides hints for die-hard C programmers that don't want to migrate to C++, how to implement the discribed features in pure C. I had a lot of fun just reading it like a normal book and enjoyed it very much. The Windows++ library would in my opinion be very useful, if it had not a serious deficiency. The part that covers the GDI just encapsulates and repackages its functionality, which is clearly insuffcient for larger apps. IMO, for the development of a modern Windows app a good graphics library is essential. But the book is not to blame because its stated goal is to describe and teach the development of reusable class libraries and does so at the example of Windows class library. Windows has the advantage of being popular enough and of allowing it to define the task sufficiently precise. I doubt that the author will provide an update for Windows 95, but as long as the most recent Windows version at any time is not too different from Windows 3.1, it will still be useful. (*) Charles Petzold, Programming Microsoft Windows 3.1, 1992 published by Microsoft Press [19]C++ How to Program H.M. Deitel & P.J. Deitel Prentice Hall ISBN ?? Reviewed-by: David M. Botters ([email protected]) This is basically a college text book, but is available in most book stores with a decent section for computer programming. The book assumes no previous knowledge of C or programming, and is designed with a beginner in mind. It makes the claim at the outset that C++ is difficult and makes no pretense that you can learn Windows C++ in 20 minutes, like so many other books on the market today. It provides a very basic intro and moves along at a good clip covering most everything you need to know. After buying so many of the Programming in 20 Minutes type books, I was happy to see this book. It is definately a good choice for one who is seriously about learning C++ from the ground up. [20]Safer C, Developing Software for High-integrity & Safty-critical Systems Les Hatton Publisher ISBN Reviewed-by: Clive King ([email protected]) Software is now an integral part of most spheres of life and the future can only see this trend increase. The complexity of software required to enable the technologies now exceeds that of any other man made construction. How many times have you found that some unexplained behavior in the program you were writing was a result of a simple error, maybe using a == instead of a = in an assignment statement! The programmer writing the code that controls the landing gear of the next plane you fly on is also human and is therefore capable of making the same sorts of mistakes as you. Agree? If not there is a very bright career in the safety critical software development business or you are not being totally honest with yourself. Safer C attempts to shed light on improving the quality of software constructed for high-integrity and safety critical systems. The book concentrates on the process of developing software and the language issues which effect software quality. It rightly does not attempt to address the issues of specification and design. The use of C, which is well known for its many traps and pitfalls, may seem a curious choice to some. The choice is founded on the authors observation that C has been in used for a number of years, C programs including UNIX have been ported between a multitude of platforms. C has been misused in a multitude of ways and the problems of C are very well documented. C is a small, standardized language and a subset of C which eliminates the language feature which may bring problems can be described. The most important feature of using C in the development of high-integrity and safety critical systems and a recurring theme of the book is that better tool support for finding potential coding problems and language misuse is currently available for C than other languages. The case presented for C is strong, but by the same argument the case for Ada is worth considering if using best current practice and appropriate tool support are too much effort to overcome for reasons associated with the management of a project and programmer psychology. A better alternative I am sure is to prevent by law such people participating in projects whose product may be used in a situation when human life may be threatened. That day is getting closer. The underlying theme throughout the book is to identify dangerous practice and ruthlessly eliminate it via the use of appropriate methods and tool support. Much useful material is presented on software complexity and metrics, testing strategies, quality procedures such as ISO9001, Capability Maturity model and Total Quality Management. Where this book really excels is in describing the potential problems areas, there severity, how they can be detected and manage there use in code by either forbidding use or a strategy for safe use is given. The book justifies its self in a chapter devoted to population studies of C programs where software from a wide range of application domains is analyzed for faults and transgressions from programming standards. Also presented are the results of a study into the complexity of a range software. Formal methods were one of the great white hope in the 1980's, but the many software developers view formal methods as a smoke screen which is loaded with hype. Rightly Hatton points out that formal methods are another way of thinking about program design and construction through the medium of mathematics. 14 pages are spent discussing formal methods. What exists is very illuminating to those with no knowledge of formal methods and there application to producing C programs. Some consideration of how to develop substantial systems in C from a formal specification, rather than just considering small examples would have been useful. Hatton's humor makes the book enjoyable to read, though at times you wonder how such a serious subject can generate such a stream of antidotes. The author sometimes gives the impression of writing the book out of a passion for self preservation, instead of the more mundane reasons. Hatton digresses to talk about the importance of structure in music and architecture and manages to make coherent use of diverse examples such as Mozarts's 40th Symphony, Jimi Hendrix and the UNIX diff program to illustrate the importance of refinement. After reading the book, I concluded that given a choice of flying in a plane with software written using best current practice in C, C++, or Ada, I would choose the plane that used C software. If the emphasis is not placed here on best current practice, I might just stay at home. Safer C should be required reading for anyone who intends to write a C program outside a classroom, anyone who intends to write code for a high-integrity or safety-critical system and anyone who intends to manage a project that has high-integrity or safety-critical element or uses C. I would also recommend it to anyone who is trying to decide which language to use on a project. I could go into far more detail about the good sense the book extols, but if developing software is your business, can you really afford not to read it? Conclusion: C and C++ are great programming languages that can make programming a lot of fun. One of the best ways to learn is by taking a programming class. See if you can take a class at your school, or take a class at night school. Programming in C/C++ is a skill that could end up saving you your job or help you get a better job. I hope these tutorials help you in your quest to learn the C and C++ programming language. Acknowledgment: --------------- Steve Summit [email protected] Lizann Bolinger [email protected] Blake Sobiloff [email protected] Alex Wu [email protected] Ian Jackson [email protected] Peter Vanderlinden [email protected] Robin Schogol [email protected] Marcus Speh [email protected] Jutta Degener [email protected] Joe Dougherty [email protected] Ajay Shah [email protected] Sonia Hamilton [email protected] Klaas Teschauer [email protected] Clive King [email protected] Richard Grubb [email protected] Lincoln Abbey [email protected] Scott Hankin [email protected] --------- * List of C tutorials Last Update: 08/01/95 * * Compiled By: Vinit Carpenter - [email protected] * Note that this document is provided as is. The information in it is *not* warranted to be correct; you use it at your own risk. o The LEARN C/C++ TODAY List is Copyright 1994 by Vinit S. Carpenter ([email protected]). It may be reproduced and distributed in whole or in part, subject to the following conditions: o This copyright and permission notice and the paragraph in the introduction about the frequency of updates must be retained on all complete or partial copies. o Any translation or derivative work must be approved by me before distribution. Email me - I'll will be happy to oblige ! o If you wish to charge for non-machine-readable copies you need my approval before distribution. Note that this restriction is not intended to prohibit charging for the service of printing or copying a document supplied by your customer. o If you distribute partial copies of this list, instructions for obtaining the complete version must be included, and a means for obtaining a complete version free or at cost price provided. o Exceptions to these rules may be granted, and I shall be happy to answer any questions about this copyright --- Simply e-mail me. These restrictions are here to protect the contributors, not to restrict you as educators and learners. o Vinit Carpenter asserts the right to be identified as the author of this work, and claims the moral rights of paternity and integrity, in accordance with the Copyright, Designs and Patents Act, 1988. ----------------------------------------------------------------------------- Vinit S. Carpenter Marquette University [email protected] ----------------------------------------------------------------------------- Author of the INTERNET-MENU for OpenVMS and LEARN C/C++ TODAY List Moderator: COMP.BINARIES.IBM.PC * Email me for details * <a href="http://vinny.csd.mu.edu"> My Personal Linux Web Server</a> ----------------------------------------------------------------------------- * Ayrton Senna daSilva - Rest In Peace * ----------------------------------------------------------------------------- Geek Code: GE d? H S+:+ g+ p? au+ a26 w++ v C++++ UL++++ P++ L+++ 3- E--- N+++ K--- W--- M-- V$ -po+ Y+ t+++ 5- j tv+++ b+++ D++ B--- e- U--- h++ f? r n--- y*
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |