Introduction to the C Tutorial The programming language C, was originally developed by Dennis Ritchie of Bell Laboratories and was designed to run on a PDP-11 with a UNIX operating system. Although it was originally intended to run under UNIX, there has been a great interest in running it under the MS-DOS operating system and specifically on the IBM PC and compatibles. It is an excellent language for this environment because of the simplicity of expression, the compactness of the code, and the wide range of applicability. It is not a good "beginning" language because it is somewhat cryptic in nature. It allows the programmer a wide range of operations from high level down to a very low level approaching the level of assembly language. There seems to be no limit to the flexibility available. One experienced C programmer made the statement, "You can program anything in C", and the statement is well supported by my own experience with the language. Along with the resulting freedom however, you take on a great deal of responsibility because it is very easy to write a program that destroys itself due to the silly little errors that the Pascal compiler will flag and call a fatal error. In C, you are very much on your own as you will soon find. Since C is not a beginners language, I will assume you are not a beginning programmer, and I will not attempt to bore you by defining a constant and a variable. You will be expected to know these basic concepts. You will, however, be expected to know nothing of the C programming language. I will begin with the most basic concepts of C and take you up to the highest level of C programming including the usually intimidating concepts of pointers, structures, and dynamic allocation. To fully understand these concepts, it will take a good bit of time and work on your part because they not particularly easy to grasp, but they are very powerful tools. Enough said about that, you will see their power when we get there, just don't allow yourself to worry about them yet. Programming in C is a tremendous asset in those areas where you may want to use Assembly Language but would rather keep it a simple to write and easy to maintain program. It has been said that a program written in C will pay a premium of a 50 to 100% increase in runtime because no language is as compact or fast as Assembly Language. However, the time saved in coding can be tremendous, making it the most desirable language for many programming chores. In addition, since most programs spend 90 percent of their operating time in only 10 percent or less of the code, it is possible to write a program in C, then rewrite a small portion of the code in Assembly Language and approach the Page 1 Introduction to the C Tutorial execution speed of the same program if it were written entirely in Assembly Language. Approximately 75 percent of all new commercial programs introduced for the IBM PC have been written in C, and the percentage is probably growing. Microsoft recently introduced a new Macro Assembler, version 4.0, and they said that it was written in C. There are probably a few routines coded in Assembly Language, but the majority was written in C. Since C was designed essentially by one person, and not by a committee, it is a very usable language but not too well defined. There is no standard for the C language, but the American National Standards Association (ANSI) is developing a standard for the language at which time it will follow rigid rules. It is interesting to note, however, that even though it does not have a standard, the differences between implementations are very small. This is probably due to the fact that the original unofficial definition was so well thought out and carefully planned that extensions to the language are not needed. Pascal, which has a rigorous definition, has many extensions by compiler writers and every extension is different. This leads to a real problem when transporting a Pascal program from one computer to another. Even though the C language enjoys a good record when programs are transported from one implementation to another, there are differences in compilers as you will find anytime you try to use another compiler. Most of the differences become apparent when you use nonstandard extensions such as calls to the DOS BIOS, but even these differences can be minimized by careful choice of programming means. Your first problem will not be how to program in C, but how to use your particular compiler. Since there are over 20 good compilers available, there is no way I can cover the operation of all compilers. Notes about a few of the better known compilers are given in the "COMPILER.DOC" file on the distribution diskette. Read the documentation that came with your compiler to learn how to compile and run a program. One last note about compilers. I wrote a moderately large program in C that was composed of about 1200 lines of source code contained in 4 separately compiled files. I was initially using a very inexpensive compiler from MIX Software of Richardson, Texas that sells for $39.95. This compiler did everything I ever asked it to do and did it well, including floating point numbers. In addition, the Page 2 Introduction to the C Tutorial compile times were extremely short and there were many extensions to the basic language as defined by Kernigan & Ritchie. In short, the compiler was a good implementation. Later, I switched over to a Lattice C compiler that sells for $500.00. It took a bit of work because the Lattice compiler did not have as many extensions as the MIX compiler. The Lattice compiler also took considerably longer to compile, probably 2 to 3 times as long. The big difference in the two compilers was in the execution time of the program which read in a file, did a lot of searching in memory, and displayed the results on the monitor. The final MIX program took 95 seconds to complete all operations, and the Lattice compiled program took only 10 seconds to complete. I should add that the MIX compiler has a speedup utility that increases the speed by a factor of about 8, according to one independent review, getting the speed of the MIX program in the range of the Lattice program. (I did not try the speedup program on this particular file.) The MIX compiler missed several subtle type errors during compile that were flagged as warnings by the Lattice compiler. Due to the nature of that particular program, either run-time would be acceptable and therefore either compiler would be acceptable. The above paragraph was given only to aid you in selecting a compiler. The Lattice compiler is very difficult to use for an inexperienced programmer, but has very few limitations. The MIX compiler, on the other hand, was very easy to set up and begin using, and would be very appropriate for most "hobby" computing. Depending on your application, the most expensive is probably not the best. In this case, the MIX compiler would be great for learning the language and for many applications. Consult the COMPILER.DOC file for notes on other compilers and recommendations on what compiler may be suitable for your purposes. Page 3