Advanced C 1992
.pdf
|
TableIntroducof Contentsion |
C C C |
|
|
|
CCC |
|
|
|
C |
C |
|
|
C |
|
Part II: Managing Data in C |
189 |
|
|
7 |
C Structures ........................................................................... |
191 |
|
|
Using the struct Keyword ............................................................ |
191 |
|
|
Arrays of Structures ..................................................................... |
195 |
|
|
Structures of Arrays ..................................................................... |
200 |
|
|
Structures of Structures ............................................................... |
203 |
|
|
Bit Fields in Structures ................................................................ |
206 |
|
|
Using the typedef Keyword ......................................................... |
208 |
|
|
Using the offsetof() Macro .......................................................... |
213 |
|
|
Pointers to Structures .................................................................. |
216 |
|
|
Understanding unions ................................................................. |
219 |
|
|
Summary ..................................................................................... |
226 |
|
8 |
Dynamic Memory Allocation ................................................. |
227 |
|
|
Using the malloc( ) Function....................................................... |
228 |
|
|
Using the calloc( ) Function ........................................................ |
232 |
|
|
Using the free( ) Function ........................................................... |
235 |
|
|
Using the realloc( ) Function ....................................................... |
237 |
|
|
Allocating Arrays ......................................................................... |
244 |
|
|
Global Memory versus Local Memory ......................................... |
247 |
|
|
Summary ..................................................................................... |
248 |
|
9 Disk Files and Other I/O ....................................................... |
249 |
|
|
|
File I/O Basics ............................................................................. |
250 |
|
|
Text Files and Binary Files .......................................................... |
251 |
|
|
Creating and Using Temporary Work Files ................................. |
256 |
|
|
Stream Files and Default File Handles ......................................... |
268 |
|
|
The stdin File.......................................................................... |
271 |
|
|
The stdout File ....................................................................... |
272 |
|
|
The stderr File ........................................................................ |
272 |
|
|
The stdaux File ....................................................................... |
273 |
|
|
The stdprn File ....................................................................... |
274 |
|
|
Low-Level I/O and File Handles ................................................. |
278 |
|
|
Standard Low-Level File Handles ................................................ |
280 |
|
|
Console and Port I/O .................................................................. |
280 |
|
|
Direct Port I/O ........................................................................... |
288 |
|
xi
Advanced C
The PC Printer Ports................................................................... |
289 |
The PC Communications Ports .................................................. |
296 |
Summary ..................................................................................... |
318 |
10 Data Management: Sorts, Lists, and Indexes ......................... |
321 |
Sorting ........................................................................................ |
322 |
Merging ...................................................................................... |
329 |
Purging ....................................................................................... |
336 |
Sorting, Merging, and Purging All in One................................... |
343 |
Linked Lists ................................................................................. |
344 |
Using Dynamic Memory ........................................................ |
345 |
Disk-Based Lists ...................................................................... |
346 |
Double Linked Lists ................................................................ |
346 |
Indexing ...................................................................................... |
367 |
Fixed-field Disk Files ................................................................... |
392 |
B-trees ......................................................................................... |
392 |
Summary ..................................................................................... |
430 |
Part III: Working with Others ............................................................................ |
433 |
11 C and Other Languages ......................................................... |
435 |
Other Languages ......................................................................... |
436 |
Assembly ................................................................................. |
438 |
FORTRAN............................................................................. |
441 |
Pascal ...................................................................................... |
442 |
BASIC .................................................................................... |
443 |
Calling Other Languages from C................................................. |
443 |
Calling Assembly from C ........................................................ |
447 |
Calling FORTRAN and Pascal from C ................................... |
449 |
Calling C Functions from Other Languages ................................ |
450 |
Calling C from Assembly ........................................................ |
451 |
Calling C from FORTRAN and Pascal ................................... |
462 |
All the Things that Can Go Wrong ............................................. |
462 |
Looking at Data ...................................................................... |
463 |
Names and Limits ................................................................... |
465 |
Summary ..................................................................................... |
465 |
xii
TableIntroductionof Contents |
C C C |
|
|
CCC |
|
|
C |
C |
|
C |
|
12 C and Databases .................................................................... |
467 |
|
Interfacing with dBASE-Compatible Programs ........................... |
468 |
|
Using dBASE Files Directly......................................................... |
468 |
|
Reading dBASE and dBASE-Compatible Files ........................ |
474 |
|
Creating dBASE and dBASE-Compatible Files ....................... |
484 |
|
Updating dBASE and dBASE-Compatible Files ...................... |
494 |
|
Summary ..................................................................................... |
494 |
|
13 All About Header Files ........................................................... |
497 |
|
Function Prototypes .................................................................... |
497 |
|
The ANSI C Header Files ........................................................... |
500 |
|
The assert.h File (ANSI) .............................................................. |
501 |
|
The ctype.h File (ANSI) .............................................................. |
502 |
|
The errno.h File (ANSI) .............................................................. |
504 |
|
The float.h File (ANSI) ............................................................... |
506 |
|
The io.h File................................................................................ |
508 |
|
The limits.h File (ANSI) ............................................................. |
508 |
|
The locale.h File (ANSI) ............................................................. |
509 |
|
The malloc.h File ........................................................................ |
510 |
|
The math.h File (ANSI) .............................................................. |
510 |
|
The memory.h File...................................................................... |
511 |
|
The search.h File ......................................................................... |
511 |
|
The setjmp.h File (ANSI) ............................................................ |
512 |
|
The signal.h File (ANSI) ............................................................. |
512 |
|
The stdarg.h File (ANSI) ............................................................. |
513 |
|
The stddef.h File (ANSI) ............................................................. |
515 |
|
The stdio.h File (ANSI)............................................................... |
515 |
|
The stdlib.h File (ANSI) ............................................................. |
516 |
|
String Conversion ................................................................... |
516 |
|
Memory Allocation ................................................................. |
516 |
|
Random Numbers .................................................................. |
516 |
|
Communications with the Operating System.......................... |
516 |
|
Search Functions ..................................................................... |
517 |
|
Integer Math ........................................................................... |
517 |
|
Multibyte Characters .............................................................. |
517 |
|
The string.h File (ANSI) ............................................................. |
517 |
|
The time.h File (ANSI) ............................................................... |
518 |
|
The varargs.h File ........................................................................ |
518 |
|
Summary ..................................................................................... |
518 |
|
xiii
Advanced C
Part IV: Documenting the Differences |
519 |
14 ANSI C’s Library Functions ................................................... |
521 |
Functions .................................................................................... |
522 |
abort()..................................................................................... |
522 |
abs() ........................................................................................ |
522 |
acos() ...................................................................................... |
523 |
asctime() ................................................................................. |
523 |
asin() ....................................................................................... |
524 |
assert() .................................................................................... |
524 |
atan() ...................................................................................... |
524 |
atan2() .................................................................................... |
525 |
atexit() .................................................................................... |
525 |
atof() ....................................................................................... |
526 |
atoi() ....................................................................................... |
526 |
atol() ....................................................................................... |
526 |
bsearch() ................................................................................. |
527 |
calloc() .................................................................................... |
528 |
ceil()........................................................................................ |
528 |
clearerr() ................................................................................. |
528 |
clock() ..................................................................................... |
529 |
cos() ........................................................................................ |
529 |
cosh() ...................................................................................... |
530 |
ctime() .................................................................................... |
530 |
difftime() ................................................................................ |
531 |
div() ........................................................................................ |
531 |
exit() ....................................................................................... |
532 |
exp() ....................................................................................... |
532 |
fabs() ....................................................................................... |
533 |
fclose() .................................................................................... |
533 |
feof() ....................................................................................... |
533 |
ferror() .................................................................................... |
534 |
fflush() .................................................................................... |
534 |
fgetc() ..................................................................................... |
535 |
fgetpos() .................................................................................. |
535 |
fgets() ...................................................................................... |
536 |
floor() ..................................................................................... |
536 |
xiv
TableIntroductionof Contents |
C C C |
|
|
CCC |
|
|
C |
C |
|
C |
|
fmod() .................................................................................... |
537 |
|
fopen() .................................................................................... |
537 |
|
fprintf() ................................................................................... |
538 |
|
fputc() ..................................................................................... |
538 |
|
fputs() ..................................................................................... |
539 |
|
fread() ..................................................................................... |
539 |
|
free() ....................................................................................... |
540 |
|
freopen() ................................................................................. |
540 |
|
frexp() ..................................................................................... |
541 |
|
fscanf() .................................................................................... |
542 |
|
fseek() ..................................................................................... |
542 |
|
fsetpos() .................................................................................. |
543 |
|
ftell() ....................................................................................... |
544 |
|
fwrite() .................................................................................... |
544 |
|
getc()....................................................................................... |
545 |
|
getchar().................................................................................. |
545 |
|
gets() ....................................................................................... |
546 |
|
gmtime() ................................................................................. |
546 |
|
isalnum() ................................................................................ |
547 |
|
isalpha() .................................................................................. |
547 |
|
iscntrl() ................................................................................... |
547 |
|
isdigit() ................................................................................... |
548 |
|
isgraph().................................................................................. |
548 |
|
islower() .................................................................................. |
549 |
|
isprint() ................................................................................... |
549 |
|
ispunct() ................................................................................. |
549 |
|
isspace() .................................................................................. |
550 |
|
isupper() ................................................................................. |
551 |
|
isxdigit().................................................................................. |
551 |
|
labs() ....................................................................................... |
551 |
|
ldexp() .................................................................................... |
552 |
|
ldiv() ....................................................................................... |
552 |
|
localeconv() ............................................................................. |
553 |
|
localtime() ............................................................................... |
553 |
|
log() ........................................................................................ |
554 |
|
log10() .................................................................................... |
554 |
|
longjmp() ................................................................................ |
554 |
|
malloc() .................................................................................. |
556 |
|
xv
Advanced C
mblen() ................................................................................... |
556 |
mbstowcs().............................................................................. |
557 |
mbtowc() ................................................................................ |
557 |
memchr() ................................................................................ |
558 |
memcmp() .............................................................................. |
558 |
memcpy() ............................................................................... |
559 |
memmove() ............................................................................ |
560 |
memset() ................................................................................. |
561 |
mktime() ................................................................................. |
561 |
modf() .................................................................................... |
562 |
offsetof() ................................................................................. |
562 |
perror() ................................................................................... |
563 |
pow() ...................................................................................... |
564 |
printf() .................................................................................... |
564 |
putc() ...................................................................................... |
564 |
putchar() ................................................................................. |
565 |
puts() ...................................................................................... |
565 |
qsort() ..................................................................................... |
566 |
raise() ...................................................................................... |
566 |
rand() ...................................................................................... |
567 |
realloc() ................................................................................... |
567 |
remove() ................................................................................. |
568 |
rename() ................................................................................. |
568 |
rewind() .................................................................................. |
568 |
scanf() ..................................................................................... |
569 |
setbuf() ................................................................................... |
569 |
setjmp() .................................................................................. |
570 |
setlocale() ................................................................................ |
571 |
setvbuf() .................................................................................. |
572 |
signal() .................................................................................... |
573 |
sin() ........................................................................................ |
574 |
sinh() ...................................................................................... |
575 |
sprintf()................................................................................... |
575 |
sqrt() ....................................................................................... |
576 |
srand() .................................................................................... |
576 |
sscanf() .................................................................................... |
576 |
strcat() .................................................................................... |
577 |
strchr() .................................................................................... |
577 |
xvi
TableIntroductionof Contents |
C C C |
|
|
CCC |
|
|
C |
C |
|
C |
|
strcmp() .................................................................................. |
578 |
|
strcoll( ) .................................................................................. |
579 |
|
strcpy( ) .................................................................................. |
580 |
|
strcspn( ) ................................................................................. |
580 |
|
strerror( ) ................................................................................ |
581 |
|
strftime( ) ................................................................................ |
581 |
|
strlen() .................................................................................... |
583 |
|
strncat() .................................................................................. |
584 |
|
strncmp() ................................................................................ |
584 |
|
strncpy() ................................................................................. |
585 |
|
strpbrk().................................................................................. |
586 |
|
strrchr()................................................................................... |
586 |
|
strspn() ................................................................................... |
587 |
|
strstr() ..................................................................................... |
588 |
|
strtod() .................................................................................... |
588 |
|
strtok() .................................................................................... |
589 |
|
strtol() ..................................................................................... |
590 |
|
strtoul() ................................................................................... |
591 |
|
strxfrm().................................................................................. |
592 |
|
system() .................................................................................. |
593 |
|
tan() ........................................................................................ |
594 |
|
tanh() ...................................................................................... |
594 |
|
time() ...................................................................................... |
595 |
|
tmpfile().................................................................................. |
596 |
|
tmpnam() ............................................................................... |
596 |
|
tolower() ................................................................................. |
597 |
|
toupper()................................................................................. |
597 |
|
ungetc() .................................................................................. |
597 |
|
va_arg() ................................................................................... |
598 |
|
va_end() .................................................................................. |
600 |
|
va_start() ................................................................................. |
601 |
|
vfprintf() ................................................................................. |
601 |
|
vprintf() .................................................................................. |
602 |
|
vsprintf() ................................................................................. |
604 |
|
wcstombs().............................................................................. |
605 |
|
wctomb() ................................................................................ |
606 |
|
printf() Format Codes ................................................................. |
606 |
|
c .............................................................................................. |
607 |
|
xvii
Advanced C
e and E .................................................................................... |
608 |
f .............................................................................................. |
609 |
g and G ................................................................................... |
610 |
n ............................................................................................. |
610 |
o ............................................................................................. |
610 |
p and P ................................................................................... |
611 |
s .............................................................................................. |
612 |
u ............................................................................................. |
612 |
x and X ................................................................................... |
613 |
scanf() format codes .................................................................... |
614 |
c .............................................................................................. |
615 |
d ............................................................................................. |
615 |
o ............................................................................................. |
615 |
x.............................................................................................. |
616 |
i .............................................................................................. |
616 |
u ............................................................................................. |
617 |
e, f, and g ................................................................................ |
617 |
n ............................................................................................. |
618 |
p ............................................................................................. |
618 |
s .............................................................................................. |
618 |
[...] .......................................................................................... |
619 |
Summary ..................................................................................... |
619 |
15 Preprocessor Directives .......................................................... |
621 |
The Macro Continuation Operator (\) ........................................ |
622 |
The Stringize Operator (#) .......................................................... |
622 |
The Characterize Operator (#@) ................................................. |
623 |
The Token Paste Operator (##) .................................................. |
624 |
The Defined Identifier Operator (defined()) ............................... |
624 |
The #define Directive.................................................................. |
625 |
The #error Directive.................................................................... |
628 |
The #include Directive ................................................................ |
629 |
The #if Directive ......................................................................... |
629 |
The #ifdef Directive .................................................................... |
630 |
The #ifndef Directive .................................................................. |
631 |
The #else Directive ...................................................................... |
632 |
The #elif Directive ...................................................................... |
633 |
The #endif Directive ................................................................... |
633 |
xviii
TableIntroductionof Contents |
C C C |
|
|
CCC |
|
|
C |
C |
|
C |
|
The #line Directive ..................................................................... |
634 |
|
The #pragma Directive................................................................ |
635 |
|
The message Pragma ............................................................... |
635 |
|
The pack Pragma .................................................................... |
636 |
|
The #undef Directive .................................................................. |
637 |
|
Predefined Macros....................................................................... |
637 |
|
The _ _DATE_ _Macro ......................................................... |
637 |
|
The _ _TIME_ _Macro .......................................................... |
637 |
|
The_ _FILE_ _Macro ............................................................. |
638 |
|
The_ _LINE_ _Macro ............................................................ |
638 |
|
The_ _STDC_ _Macro .......................................................... |
638 |
|
NULL ..................................................................................... |
638 |
|
The offsetof() Macro ............................................................... |
638 |
|
Summary ..................................................................................... |
639 |
|
16 Debugging and Efficiency ...................................................... |
641 |
|
Debugging .................................................................................. |
641 |
|
Common Bugs ........................................................................ |
642 |
|
Rules for Debugging ............................................................... |
649 |
|
Using the assert() Macro ......................................................... |
650 |
|
Debug Strings and Messages ................................................... |
652 |
|
Debuggers ............................................................................... |
655 |
|
Efficiency .................................................................................... |
657 |
|
32-Bit Programs ...................................................................... |
658 |
|
Compiler Optimization .......................................................... |
660 |
|
Direct Video I/O .................................................................... |
667 |
|
Floating-Point Optimization ................................................... |
667 |
|
Inline Assembly ....................................................................... |
669 |
|
Linking for Performance ......................................................... |
670 |
|
Pascal and cdecl Calling Conventions ..................................... |
671 |
|
Precompiled Headers .............................................................. |
671 |
|
Using 80286/80386/80486 Instruction Sets ........................... |
671 |
|
Using a Source Profiler ........................................................... |
672 |
|
Using Intrinsic Functions........................................................ |
672 |
|
Using Memory Models ........................................................... |
673 |
|
Summary ..................................................................................... |
675 |
|
xix
Advanced C
Part V: Appendixes |
|
677 |
A |
The ASCII |
|
|
Character Set ......................................................................... |
679 |
B |
Compiler Variations .............................................................. |
681 |
|
Borland’s C++ 3.1 ....................................................................... |
682 |
|
Microsoft .................................................................................... |
686 |
|
C/C++ 7.0 .............................................................................. |
686 |
|
QuickC for Windows 1.0 ....................................................... |
690 |
|
Watcom C/386 9.01 ................................................................... |
692 |
C |
Introduction to C++ .............................................................. |
695 |
|
Object-Oriented Programming (OOP) ....................................... |
696 |
|
Abstraction ............................................................................. |
696 |
|
Encapsulation ......................................................................... |
696 |
|
Hierarchies .............................................................................. |
697 |
|
Learning C++ .............................................................................. |
697 |
|
Overloading Functions ................................................................ |
701 |
|
Declaring Variables When Needed .............................................. |
704 |
|
Default Function Argument Values ............................................. |
706 |
|
References ................................................................................... |
710 |
|
References as Return Values ........................................................ |
711 |
|
Classes ......................................................................................... |
714 |
D |
Function /Header File Cross Reference.................................. |
723 |
|
Index ...................................................................................... |
741 |
xx