Juergan and All: > Could you send an example file? It's a bit hard to guess what's wrong > only from your comments :) I have attached a sample file. On this particular file section 1.2 doesn't print at all. Furthermore it's touch and go whether the headers print either. DAVID -- Subscribe to the Linux C Mailing Lists Today! mailto:[EMAIL PROTECTED] http://users.senet.com.au/~lloy0076/linux_c_programming/index.html
#This file was created by <lloy0076> Thu Oct 14 14:36:50 1999 #LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team \lyxformat 2.15 \textclass linuxdoc \language default \inputencoding default \fontscheme default \graphics default \paperfontsize 10 \spacing single \papersize a4paper \paperpackage a4 \use_geometry 0 \use_amsmath 0 \paperorientation portrait \secnumdepth 3 \tocdepth 3 \paragraph_separation skip \defskip medskip \quotes_language english \quotes_times 2 \papercolumns 1 \papersides 1 \paperpagestyle default \layout Title \added_space_top vfill \added_space_bottom 0.3cm Developing a \begin_inset Quotes eld \end_inset Hello World! \begin_inset Quotes erd \end_inset Application in C with Linux \layout Author David Lloyd \layout Date 14 September 1999 \layout Abstract ABSTRACT \layout Abstract This document aims to introduce readers to the most basic of all programs - the classical \begin_inset Quotes eld \end_inset Hello World! \begin_inset Quotes erd \end_inset program. In doing so it will introduce readers to a number of important programming constructs, concepts and data types. \layout Standard \begin_inset LatexCommand \tableofcontents{} \end_inset \layout Section Developing a \begin_inset Quotes eld \end_inset Hello World! \begin_inset Quotes erd \end_inset Application in C with Linux \layout Subsection This document's objectives \layout Standard This document aims to introduce you to the C programming language, a small part of its history, some of its structure and short-comings and, of course, your very first program. Here is the outcome of that program: \layout Standard <localhost root># ./hello \layout Standard Hello World! \layout Standard <localhost root># \layout Standard Whilst this program is not at all exciting it will introduce you to a number of important concepts and topics in C. \layout Subsection What you will learn \layout Standard By the end of this tutorial you will be able to: \layout Itemize understand the basis of all C programs \layout Itemize understand the concept of standard libraries and C headers \layout Itemize explain what a function is and understand its structure/syntax \layout Itemize write to standard output using printf \layout Itemize exit gracefully from the main function \layout Itemize create and compile the program using tools supplied with virtually all linux distributions \layout Section Requirements \layout Standard This section shows the hardware and software requirements necessary to develop your first \begin_inset Quotes eld \end_inset Hello World! \begin_inset Quotes erd \end_inset application. In addition, it also specifies what the author assumes you already know. \layout Subsection Hardware and software requirements \layout Standard You will need the following to be able to produce the program outlined in this document: \layout Itemize linux \layout Itemize gcc or egcs \layout Itemize gmake \layout Itemize vi, pico, joe or emacs (any text editor will do) \layout Standard The author cannot think of a hard-drive installation of linux which would lack these tools. Most users can assume that they all exist on their system. \layout Subsection Assumed knowledge \layout Standard The following knowledge is assumed: \layout Itemize basic knowledge of the linux operating system \layout Itemize basic computer knowledge, such as what a computer is, what a program is \layout Itemize an understanding of linux file permissions (read, write and execute) \layout Itemize how to use the text editor of your choice \layout Standard As you have managed to obtain this document, the author feels that these are reasonable assumptions. \layout Subsection What do I do if.... \layout Standard Please go to this address: http://www.linux.org. This is the American Linux User Groups' home pages. There are sections for new users of linux through to experienced users of linux. Read the many and varied FAQs. Consider joining a local linux user group's mailing list to ask more detailed questions. \layout Section An Overview of C \layout Standard This section gives a brief overview of the C programming language. First it gives a short history of the language, a brief description of the language and a brief discussion of C's shortcomings. \layout Subsection History of C \layout Standard In 1965, the MIT had sponsored a project codenamed Project MAC. Co-funded by General Electric and Bell Labs, two talented programmers Thompson and Ritchie began to produce an operating system codenamed Multics. As time went by, though, Bell Labs found the project too expensive and withdrew their support for Multics. Thompson and Ritchie, who by then had found their still-developing operating system already an excellent programming environment, led an informal group of Bell Labs employees in making a new operating system called Unix \begin_float footnote \layout Standard Unix is, of course, a play on the word Multics \end_float . \layout Standard At the time two languages existed which might have been able to code the new operating system - PL/I and BCPL. Hampered by insufficient hardware - Ritchie's original computer only had 8kB of RAM - PL/I was simply out of the question. Thompson had some experience with BCPL, however he felt it lacked a number of important features necessary for the new operating system and, above all, he thought it too slow. \layout Standard Hence, the programming language B \begin_float footnote \layout Standard Some say that B is simply a contraction of BCPL; others say that it is a contraction of a programming language Thompson had developed many years before and named after his wife Bonnie - hence the B. \end_float came into existence. This language could squeeze into 8kB of RAM, run on a very slow PDP-11 and served its purpose. Nonetheless, many programmers felt the need for improvements. These were: enhanced pointer \begin_float footnote \layout Standard Each memory location has a very specific address; put simply a pointer is a variable (storage space) which contains the address of a particular portion of memory \end_float handling, stricter type \begin_float footnote \layout Standard A data type, here contracted just to type, means the form of data being dealt with by the computer. For example, an integer is a data type that stores only whole number. A float is a data type that stores numbers in scientific x.xx * 10^y notation, hence can contain both decimals and very large numbers. \end_float capabilities and faster output code. \layout Standard During the years 1971 Ritchie and others worked on this newly improved language. In 1978 the book \emph on The C Programming Language \emph default by Kernigan and Ritchie was released and a new era of C programming had begun. In 1989, the American National Standards Institute ANSI released a definition of the C programming language. ANSI C is still the accepted standard for C worldwide. \layout Subsection A brief description of C \layout Standard This section gives a brief overview of C. The first section will briefly outline the uses to which you can put C. The second subsection will introduce you to a number of the standardised packages which come with virtually every distribution of C. The last subsection will outline the concepts you will learn by studying \begin_inset Quotes eld \end_inset Hello World! \begin_inset Quotes erd \end_inset in C. \layout Subsubsection The Uses of C \layout Standard C is a general purpose programming language. However it is not what is termed a high-level programming language. A high level language abstracts the user from the inner workings of the computer, ensures strict type checking and standardises many common functions. C does not offer a large range of inbuilt functions and types of data, nor does it perform strict data type checking. Type checking occurs when a compiler checks to see that you have passed the correct type of data (eg a number) to a particular part of a program. Errors can easily occur if you pass a character to part of a program expecting a number for example. \layout Standard On the other hand, C is not a low-level language. It's certainly much more abstract than machine or assembly language, yet a well written and compiled C program can execute as quickly as a reasonably written piece of assembly code. C allows you to access the operating system at a lower level than many other modern languages. This gives C a lot of power but it also means you have to be more careful when writing a C program. \layout Standard C tends to assume that you know what you are doing, hence it is relatively easy to make an unexpected segmentation fault and core dump using C than a heavily typed language such as Pascal. \layout Standard Because of this flexibility C can be put to almost any use imaginable. It makes an excellent language to program device drivers and linux kernel modules. Both of these applications require you to have a degree of access to the operating system and speed that other higher level languages simply don't ofer. It is also a language well suited to event driven programming. The GIMP and its toolkit, Gtk+, are both written in C; although there have been ports to Ada, Pascal and even C++, C is still the language of choice for many Gtk+ programmers. \layout Standard Finally, although these libraries are not built-in to the C definition itself, C programmers world wide have accepted a number of standard libraries for use when programming C. You will find out about some of them in the next subsection. \layout Subsubsection Standard libraries \layout Standard Standard libraries are not part of the C programming language itself. They are useful libraries which contain functions (actions) which most C programs need to do regularly. ANSI does comment on the standard C libraries. Here is a very incomplete list of standard libraries and a brief description of the type of functions they contain: \layout Description stdio.h This is the standard input/output library. It contains functions necessary to manipulate console input and output, streams, file input and output and a number of other low-level i/o functions. Most C programs require this library. \layout Description stdlib.h This library is the standard library and essentially contains functions that don't sensibly fit into stdio.h. It contains a number of type-conversion functions, memory allocation functions and other useful functions \layout Description math.h As its name suggests this standard library contains a number of mathematic al functions, such as pow (raise to the power), cos (cosine). \layout Description malloc.h Named after its most infamous function, malloc (memory allocate), this library contains functions used to allocate, deallocate and alter chunks of memory. As a byside, the allocation/deallocation of memory is what causes many C programs to crash! \layout Description string.h C is not known for its natural string handling capabilities. This library provides the bare amount of funcitons to manipulate and use strings of characters. \layout Subsubsection Concepts you will learn by studying \begin_inset Quotes eld \end_inset Hello World! \begin_inset Quotes erd \end_inset in C \layout Standard This tutorial introduces the following concepts: \layout Itemize basic program structure \layout Itemize the preprocessor and #include directive \layout Itemize functions and arguments \layout Itemize the main function \layout Itemize the standard input/output libraray (stdio.h) \layout Itemize printf \layout Itemize return \layout Itemize compilation of "Hello World!" in C with the use of a basic Makefile and gcc under a linux operating system \begin_float footnote \layout Standard As this particular program conforms to the ANSI C standard, it should compile and run under many different platforms, linux being one \end_float \layout Subsection Shortcomings of C \layout Standard C has a number of shortcomings. None of these shortcomings are fatal to your use of C and many of them are quirks of the language itself. Nonetheless, it's worth being aware of them. Here are some of them listed in no particular order. The author will leave it as an exercise for you to work out how they might make C more difficult, less robust or simply a pain to program with: \layout Itemize C does not perform strong type checking \layout Itemize C's handling of arrays, pointers and especially arrays of characters is at first counter-intuitive \layout Itemize C does not check to see if you're using memory you shouldn't be; you are responsible for not using more memory than you've asked for and deallocating unused memory \layout Itemize It is not easy to reuse modules using C - it is possible but C is not an Object Oriented Programming Language \layout Itemize The * and & operators (dereference and address-of) are, to put it mildly, fantastically confusing; mistakes with one or both of these even catch out seasoned programmers \layout Itemize No group has come up with a standard way to write an event-driven windows program; this isn't a shortcoming of C per se however it is one reason (the author believes) that Java has become so popular \layout Standard Nonetheless, the flexibility and speed of C have made it one of the world's most successful programming languages. There are many C programmers in the world and most programmers will help other programmers if they research and try to fix their own problems first. C is a rich, mature language that for all of its shortcomings is still very powerful. \layout Section The \begin_inset Quotes eld \end_inset Hello World! \begin_inset Quotes erd \end_inset Application - QuickStart \layout Standard This section will show you without much explanation how to write and make the \begin_inset Quotes eld \end_inset Hello World! \begin_inset Quotes erd \end_inset application. As such, don't expect to understand everything that is written. Simply do as the instructions say and you should be able to get a working program. This section assumes that you are using linux. \layout Subsection A quick and dirty start... \layout Standard For a very quick and dirty start, simply type in the following program using your text editor (such as vi or emacs): \layout Quote #include <stdio.h> \layout Quote int main(int argc, char *argv[]) { \begin_deeper \layout Quote printf( \begin_inset Quotes eld \end_inset Hello World! \backslash n \begin_inset Quotes erd \end_inset ); \end_deeper \layout Quote return 0; \layout Quote } \layout Standard Save this as HelloWorld.c. Then execute this command: \layout Quote <~>$ gcc -o HelloWorld HelloWorld.c \layout Standard After this you should be able to do this: \layout Quote <~>$ ./HelloWorld \layout Quote Hello World! \layout Quote <~>$ \layout Standard Please note that case is important in C and the linux operating system. The next section will explain \begin_inset Quotes eld \end_inset HelloWorld! \begin_inset Quotes erd \end_inset in more detail. \layout Section \begin_inset Quotes eld \end_inset HelloWorld! \begin_inset Quotes erd \end_inset - The Detail \layout Standard This section will explain the programming concepts shown in our \begin_inset Quotes eld \end_inset HelloWorld! \begin_inset Quotes erd \end_inset application. We wil divide it into three broad sections: theory, the C programming structure s and syntax, and the GNU C Compiler GCC. To make this section easier you might like to print the HelloWorld.c application you developed above. For that matter, it's not large so you could also copy it by hand! \layout Subsection Theory \layout Standard A program is a set of step-by-step instructions which explicitly tell the computer exactly what to do. To help us program computers various people or organisations have invented computer programming languages such as C and Pascal. Programming languages have to broad divisions;: low-level and high-level programming languages. Most programming languages lie somewhere between these divisions. C is closer to a low-level language than Pascal. \layout Standard Computer only understand machine language. We can represent this on screen in two formats: \layout Itemize The binary format, eg 100101011111011010110111101101 \layout Itemize The assembly format, eg add ax, bx \layout Standard As you can see the binary format is very difficult for humans to understand. Although the assembly format is a little easier you will find later that it too is too low-level for ease of use. We can now give a very broad definition of low level language: \layout Description low-level A low level programming language provides little or no abstraction from the inner workings of the computer. \layout Standard People have invented various higher level programming languages to help them write programs more efficiently and with less errors \begin_float footnote \layout Standard Imagine trying to find the misplaced 1 in a machne language program consisting of 1000's of ones and zeros! \end_float . Different high-level languages offer differing features and abilities: Fortran is quite strong in mathematics, COBOL is more suited to a business application and C, although general purpose, excels in writing operating system type software. Here is a reasonable definition of a high level. \layout Description high-level A high level programming language provides a certain degree of abstraction from the inner workings of the computer. \layout Standard Nonetheless, the computer still can only understand machine language. In order to run a program written in a higher level language you need to translate your program into machine language. Although you could do this by hand, it is best done by using either an interpreter or a compiler. \layout Standard An interpreter reads every line of your program in sequence, translates it on the fly into machine language and executes it. If the first line is repeated a number of times, for example, it is read a number of times and translated that number of times. There are two primary advantages of an interpreter: they are often interactive so you can see your results immediately and they involve less work to get working once you have written your program. There are two primary disadvantages of an interpreter: they're slower than a compiled program and you need a copy of the interpreter to run them. Two examples of interpreted languages are BASIC and perl. \layout Standard Our definition of an interpreter could be: \layout Description interpreter A tool which reads a program in sequence and translates its instructions into machine language as it goes \layout Standard On the other hand a compiler reads the program once, translating it into machine which you then execute. A compiler produces what is known as an executable file. Your operating system will be able to read this file into memory and execute it without the need for an interpreter to assist it. The primary advantage of a compiler is speed. A compiled program almost always executes more quickly than an interpreted program. The main disadvantage is complexity; compiling doesn't always allow one to see one's results immediately and there are a number of intermediate stages through which one must go to produce a comp8led program. Pascal, C and Ada are all compiled programs. \layout Standard Our definition of a compiler could be: \layout Description compiler A tool which reads a program in sequence and translates it into a form which the operating system can execute directly \layout Standard \the_end