An introduction to C, by Tom Torfs - Fix list

The names indicated are the persons who made the reports and who will be included in the credits section.
Fixed/added in version 2004-05-03:

* updated the email address information

* also updated the PDF and text versions and the ZIP archive

* added link to free C/C++ interpreter

Fixed/added in version 2001-10-27:

* moved the site, since Xoom/NBCI stopped their service; the new URL is:

* updated the email address information

Fixed/added in version 1999-11-16:

David Tait:

* fixed wrong include file in HTML version of yesno program


* updated email address information

* updated credits section with names of all people who appear
  in this fix list

Fixed/added in version 1999-10-16:

David Tait:

* updated predefined identifiers link and added lysator link

Fixed/added in version 1999-04-23:

Jan Schuhr:

* changed link to Dinkumware's C reference to /refxc.html

Fixed/added in version 1999-01-07:

Bernd Luevelsmeyer:

* typecast enum variable to int before passing to printf("%d",...);

* removed non-standard (for now) %F printf() specifier

Fixed/added in version 1999-01-05:

Bernd Luevelsmeyer:

* added note that main() is not only function where you're not
  free to choose the return value and parameters

* extended note about character translation in descriptions of
  '\n' and text mode files

* some non-syntax words were highlighted incorrectly

* fixed some erroneous uses of "address of array" where
  "address of array's first element" was meant

* added note that plain 0 can be used instead of NULL as well

Fixed/added in version 1998-09-09:

Aaron Crane & Dann Corbit:

* added note that order of members in div_t etc. is not specified

Lawrence Kirby:

* improved definition of ptrdiff_t

Fixed/added in version 1998-08-27:

Dann Corbit:

* added explanation of "translation unit"

* used unsigned integers for birthdate
  information in prog12-1.c

Fixed/added in version 1998-08-22:

Sunil Rao:

* added rationale

Fixed/added in version 1998-08-18:

George White:

* replaced "new operator" with "another operator" to avoid
  confusion with C++'s new operator

* added reason why non-standard fopen() mode "t" is redundant

Fixed/added in version 1998-08-12:

Nick Austin:

* replaced all literal & with & in HTML version

* replaced some more literal < and > with &lt; and &gt;

* made anchors include some text

Fixed/added in version 1998-08-11:

Robin Sheppard:

* loops example programs contained literal < and >'s; replaced
  them with &lt; resp. &gt;

Bernd Luevelsmeyer:

* added missing closing ) in text in 10.4

* changed "sizeof variable" to "sizeof expression"

* changed "suggest" to "suggests"

* added footnote warning about fgets() leaving stuff
  on input buffer

* added link to break; section in 12.2

* changed "past" to "passed"

* added examples of what might go wrong with macros

* warns against using macros over functions for optimization purposes

* added alternative for "#if sizeof(int)>=4" etc.

* added explanation of # and ## operators in macro definitions

* added that ellipsis must be last parameter

* added that va_end() is not optional

* changed "would have used" to "had used"

* added that after vprintf() etc. the va_list must be va_end()'ed
  and va_start()'ed before it may be used again

* added note that the linker errors will not occur if variables
  and functions in header files made static, but still bad idea

* added link to
  and to

* explicitly mentioned assert is macro and may not be #undef'ed

* added note that ctype.h functions must be passed unsigned char
  value or EOF

* changed NULL description in reference section from "Invalid pointer
  constant" to "Pointer constant used for a pointer that points

* changed "end-of-file error" to "end-of-file condition"

* at FOPEN_MAX explanation, changed "at least 3 reserved for standard
  I/O streams" to "3 reserved for standard I/O streams, your compiler
  may reserve more for other non-standard pre-opened streams"

* added note that FILENAME_MAX needn't be maximum working filename length

* in reference section, added pointer may not be read after fclose()
  and free() and malloc()'ed memory may not be read before written

* added pointers to footnote in feof(), fread() and fwrite() description

* added that for text files, SEEK_CUR and SEEK_END may also be used
  with offset 0

* added links in references in descriptions of printf(), scanf(), vprintf()

* added note about implementation-definedness of allocating 0 bytes in
  reference section as well

* added warning that strncat() and strncpy() may produce unterminated


* added explanation of #elif

* added short note about #pragma, #error and #line

Fixed/added in version 1998-08-10:

Bernd Luevelsmeyer:

* emphasized keywords and preprocessor directives in HTML version
  and marked comments using italic


* cleared up scanf() format specifier list

* replaced overlooked literal < in HTML version by &lt;

* "a will now contain value 13.0" changed to "13.5"

* inserted horizontal lines to separate chapters

Fixed/added in version 1998-08-09:

Lawrence Kirby:

* removed spurious semicolons in the text version caused by an
  error in the conversion program for translating &lt; and &gt;

Dann Corbit:

* fgets(): - check return value
           - use sizeof for array size instead of constant
           - better way of stripping newline

* added reference to FAQ question 13.16 concerning random numbers

* added note that using goto to jump past variable initializations
  is usually a bad idea

Bernd Luevelsmeyer:

* added example of using a function multiple times

* added example of dangerous precedence of bitwise operators

* added warning about char *a,b; vs. same with typedef

* added warning about using getchar() correctly

* explicitly mentioned yourcar had to be manually initialized
  because only first union member can be initialized at definition

* added note that (unsigned)time(NULL); may cause overflow error

* added note that some hardware may be able to return really
  random numbers, but out of scope of C language

* replaced term "one line of code" by "one statement" concerning
  when a block is needed

* changed wording which seemed to imply ?: and if/else where
  completely equivalent

* expanded animals example to demonstrate useful fallthrough
  and no default

* added note that if() version of switch() evaluates argument
  multiple times

* added note that if() version of switch() could use non-integers
  like doubles also; added note on comparing floating point
  variables (not using ==)

* changed wording that seemed to imply condition in for loop
  could not consist of multiple expressions separated by comma

* replaced term 'statement' with 'expression' in same sentence

* explained why for (;;) works

* changed "does more or less the same" to "works in a similar way"

* added note about empty statements following case labels

* added example of continue

* added example of good use of goto

* fixed sample output from strings program

* seemed wording that seemed to imply any code that uses strings
  must include string.h

* cleared up explanation of why s = "string"; doesn't work

* removed incorrect footnote claiming accessing one element past
  the end of an array is allowed by the standard

* cast return value of strlen() to unsigned long instead of int

* removed one "probably" too many in sentence before sample
  output of pointers program

* changed term "type" to "representation" concerning implementation-
  definedness of pointers

* referred to struct initialization when explaining array

* mentioning "lvalue" with explanation of address operator

* removed note saying not to confuse * dereference operator
  with * used in defining pointers and replaced it by note
  explaining the similar purpose of the two

* replaced arrayname decays into "pointer to beginning of
  array" with "pointer to first element of array"

* fixed erroneous statement claiming "a" and "a+" require
  file to exist already (oops)

* added note saying FILE itself is unusable; must use FILE *

* cleared up wording that seemed to imply after fclose()
  the FILE * could not be used anymore at all

* replaced term "bounds checking" with explanation in
  discussion of gets() function


* added example code for pass by pointer

Fixed/added in version 1998-08-08:

Dann Corbit:

* extended prog4-1.c to make distinction between integer and
  floating point math more clear

* replaced int bitfield in prog6-1.c with unsigned bitfield
(also reported by Bernd Luevelsmeyer)

Tom Nolette:

* replaced &lt and &gt with &lt; and &gt; in HTML version (oops)
(also reported by Bernd Luevelsmeyer)

Bernd Luevelsmeyer:

* corrected "mailto:" links in HTML version

* fixed &lt/&gt error as also reported by Tom Nolette

* stronger wording for nested comments

* made clear that char is separate type from (un)signed char

* "return value is lost" replaced by "is not used"

* fixed HTML layout error of footnote about modifying string
  literals and changed it to stronger wording

* removed some junk text at end of section 2.4
(had noticed that myself, as well)

* made clear return value etc. restrictions apply only to main(),
  not other functions

* explained why auto is redundant

* cleared up wording that seemed to imply static was needed for
  all functions in source file to be able to access variable

* fixed link to 15. Modular approach

* separated storage class and qualifiers and added note about

* made clear %c accepts int, not char

* replaced 0 with o in printf() # flag explanation

* made clear printf() 0 flag only for numbers and '+' and ' ' flags
  only for signed numbers

* cleared up wording that seemed to imply printf() 0 flag and field
  width couldn't go together

* explained effect of printf() precision specifier on strings

* fixed %lX taking long to unsigned long in printf() example

* changed %u to %d to allow for promotion to int in printf() example

* added explicit warning against using %lf etc. for printing doubles

* added "in my opinion" to note about unreadability of chained

* changed wording of why lvalue is required left of assignment operators

* changed "binary" to "binary arithmetic" to avoid confusion with
  binary vs. unary operators
* added the term "side effect" in explanation of ++/-- operators

* added warning against a=a++;

* added term "conversion" with "typecast"

* changed wording that seemed to imply NUMBER_OF_COLOURS was not
  part of the enum

* fixed grammatical errors "would want to define" and "may want to prefer"

* added note that enums can be assigned to int variables as well

* fixed int bitfield problem as also reported by Dann Corbit

* used term "concentrate" instead of "unite"

* added note referring to Pascal records concerning structs


* added n format specifier for printf()

Version 1998-08-07:

original version