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:
http://www.geocities.com/tom_torfs/c.html
* updated the email address information
Fixed/added in version 1999-11-16:
David Tait:
* fixed wrong include file in HTML version of yesno program
Myself:
* 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 < and >
* made anchors include some text
Fixed/added in version 1998-08-11:
Robin Sheppard:
* loops example programs contained literal < and >'s; replaced
them with < resp. >
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 www.dinkumware.com/refc.html
and to www.geocities.com/CapeCanaveral/Lab/1791/c-predef.htm
* 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
nowhere".
* 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
"strings"
Myself:
* 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
Myself:
* cleared up scanf() format specifier list
* replaced overlooked literal < in HTML version by <
* "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 < and >
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
initialization
* 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
Myself:
* 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 < and > with < and > in HTML version (oops)
(also reported by Bernd Luevelsmeyer)
Bernd Luevelsmeyer:
* corrected "mailto:" links in HTML version
* fixed </> 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
extern
* 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
assignments
* 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
Myself:
* added n format specifier for printf()
Version 1998-08-07:
original version