Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Advanced C 1992

.pdf
Скачиваний:
92
Добавлен:
17.08.2013
Размер:
4.28 Mб
Скачать

 

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