3 0 C C C C C C++ C + + C++ GNU C/C++ GNU egcs UNIX shell s h e l l g a w k P e r l U N I X I / O UNIX shell awk P e r l U N I X C C C C C C U N I X 30.1 C C U N I X 70 C C U N I X U N I X U N I X C Dennis Ritchie DEC PDP-11 U N I X C M a r t i n R i c h a r d B C P L B B Ken Thompson DEC PDP-
3 0 C C + +5 5 9 7 C Brian Kernighan Dennis Ritchie C (The C Programming Language) 1978 1 983 ( A N S I ) C ANSI C ANSI C K R K e r n i g h a n R i t e h i e C ANSI 30.2 C : C C C C m a k e 30.2.1 C C C C 30-1 30-1 s q r t ( 2 5 6 ) 1 6 s q r t ( s q r t ( 2 5 6 ) ) = s q r t ( 1 6 ) 4 s q r t ( s q r t ( s q r t ( 2 5 6 ) ) ) = s q r t ( 4 ) 2 3 0-1 C M a i n Function 1 Function 1 Function 2 Function 2 Function 1 Function 1 M a i n 30-1 C
560 L i n u x COUNT_OF_ERRORS C C 30-1 Function 2 C M a i n C s h e l l U N I X C C U N I X U N I X C U N I X 30.2.2 C C 1 4. 35 a C ( T C B ) T C B C 30.3 C U N I X
3 0 C C + +5 6 1 C C C H e l l o Wo r l d, H e l l o Wo r l d 30-1 main() { printf( Hello,World\n ); } $gcc hello.c $./a.out Hello,World $ 30-1 Hello Wo r l d a.out g c c H e l l o Wo r l d a. o u t a. o u t 30-1 m a i n C m a i n m a i n 30-1 p r i n t f H e l l o Wo r l d \ n 30. 4. 4 \ n a.out UNIX C ( ) ( GNU C/C++ ) 30.4 C C C 30.4.1 C C B C P L B C P L C - 2, 147, 483, 648 2, 147, 483, 647 ANSI C l i m i t. h I N T _ M I N I N T _ M A X u n s i g n e d I N T _ M A X I N T _ M I N 3 / 2 1
562 L i n u x 3 / 2 1. 5 687. 534 8. 87534 E 2 d o u b l e A S C I I, (&) (*) int i; char c char* ptr double temp 1 6 16 30-2 int i; int *ptr; 30-2 i=5; ptr=&i; printf("%d %x %d\n",i,ptr,*ptr); 5 f7fffa6c 5 f 7 fff a 6 c % s % c p r i n t f p r i n t f 30-2 g c c 30-2 printf % % % E ( ) % G ( )
3 0 C C + +5 6 3 % X ( ) % c % d % e ( ) % f m m m. d d d % g ( ) % i % l d % n p r i n t f % o % p % s ( ) % u % x 30-3 30-3 \" \' \? \\ \ a \ b \ f ( ) \ n \ o o o \ r \ t \ v x h h 30.4.2 C 1. t r u e f a l s e C t r u e f a l s e 30-4 30-4 < > = =
564 L i n u x < = > = & & 4 100 400 ((((year%4)==0)&&((year%100)!=0)) ((year%400)==0)) && 2. C C 30-5 30-5 + - * / % + + 1 -- 1 v a r = v a r + 1 v a r = v a r- 1 a a a + = e x p r a + = e x p r a = a + e x p r UNIX 0 if (function()) { } error condition 3. 30-6
3 0 C C + +5 6 5 & 30-6 ~ < < > > 1 1 0 1 1 2 2 1 t r u e 30.4.3 C, w h i l e while (expression) statement t r u e s t a t e m e n t 0 d o d o do statement while (expression); f o r for (expr1;expr2;expr3) statement e x p r 1 e x p r 2 e x p r 2 s t a t e m e n t e x p r 3 e x p r 3 e x p r 2 s t a t e m e n t e x p r 3 e x p r 2 0 w h i l e w h i l e expr1; while (expr2) { statement; expr3 } b r e a k c o n t i n u e g o t o g o t o g o t i f :
566 L i n u x if (expr) statement e x p r s t a t e m e n t e l s e e l s e : if (expr) statement else statement e l s e else if if (expr) if (expr) statement else statement e l s e i f e l s e if if (expr) {if (expr) statement} else statement s w i t c h s w i t c h c a s e d e f a u l t c a s e b r e a k s w i t c h C C 3 0-3 30-3 128 newlicensee.zipcode=94404; - > user->zipcode=94404; 1 30.4.4 I / O p r i n t f C 30-4
3 0 C C + +5 6 7 30-4 ANSI C K R ANSI C K R 30-4 s w a p a n d m i n s w a p a n d m i n 1 o w e r C 30-4 a t m p b t m p b * a a * a * b printf ( %d %d %d,lower,i,j); 2 4 2 E O F (- 1 ) 30-5 30-4 30-5
568 L i n u x C 30-6 30-6 i i++ lower=min(i++,j); lower=((i++<j)?i++:j); i 30.4.5 1. 30-7 s a m p l e. c 30-7 sample s t d i o. h C m a t h. h m a i n m a i i a a 1 11 f o r i 1 i 11 f o r i 11 i 10
3 0 C C + +5 6 9 i 1. 0 a p r i n t 2 3 4 2. GNU C $ gcc sample.c -lm a. o u t C g c c U N I X C - o gcc-o sample s a m p l e. c - l m s a m p l e t e s t #./test /usr/bin test - g - O I - l - L ( l i b m ) s q r t () C 3. 30-8 30-8 s a m p l e. c
570 L i n u x shell 30.4.6 C - c. o a r a r 3 0-9 30-9 m a k e 30.5 Red Hat Linux U N I X 30.5.1 m a k e m a k e Red Hat Linux p m a k e m a k e i m a k e M a k e f i l e X 11 a u t o m a k e a u t c o n f s h e l l 32 M o t i f X Wi n d o w M o t i f imake M a k e f i l e m a k e System V UNIX Red Hat Linux m a k e G N U m a k e #make install
3 0 C C + +5 7 1 m a k e M a k e f i l e - f m a k e M a k e f i l e M y M a k e F i l e # make -f MyMakeFile M a k e f i l e M a k e f i l e m a k e ( C C ) ( I N S ( I N S D I R ) ( L I B D I R ( L I B S ) ( S R C ) ( O B S ) ( P R O G # make M a k e f i l e # make skel m a k e i n s t a l l # make install M a k e f i l e test man - m a n t r o ff clean archive bugreport ( m a i l ) m a k e m a k e M a k e f i l e M a k e f i l e M a k e f i l e m a k e m a k e Te X 30.5.2 R C S C V S m a k e
572 L i n u x ( R C S ) ( C V S ) Red Hat L i n u x R C S C V S R C S C V S R C C V S R C C V S R C S 8 ci co ident rcs rcsclean rcsdiff rcsmerg e rlog C V S 6 checkout update add c v s import remove commit R C S C V S C V S R C S C (/* */) $Author$ $Date$ $Header$ R C S $Id$ $Name$ c o $Revision$ 1. 1 $Source$ R C S $State$ E x p R e l S t a b
3 0 C C + +5 7 3 f o o. c C $ H e a d e r $ R C S $Header: /home/bball/sw/rcs/foo.c,v 1.1 1999/04/20 15:01:07 root Exp Root $ R C S R C S c i C V S $ C V S R O O T i n i t c v s # cvs init / u s r / d o c / r c s - 5. 7 R C S C V S /usr /doc/cvs- 1. 10. 5 G N U 30.5.3 l i n t g p r o f g d b e s c a p e c x r e f c b U N I X l i n t C l i n t l i n t C g c c GNU C - Wa l l - p e d a n t i c l i n t h t t p :// m e t a l a b. u n c. e d u / p u b / L i n u x / d e v e l / l a n g / c C lint lclint lclint-2.2a-src.tar.gz g p r o f - p m o n. o u t g p r o f g p r o g p r o f g d b - g g d b g d b g d b g d
574 L i n u x g d b X Wi n d o w x x g d b h t t p :// m e t a l a b. u n c. e d u / p u b / L i n u x / d e v e l / d e b u g g e r s ddd gdb c p p c p p c p p g c c - E - P - E - P. i 30.6 C++ C U N I X C C Bjarne Stroustrup AT T B e l l U N I X S t r o u s t r u p C C C 1 989 ( I S O ) C C 30.7 C + + C + + C C + + C C + + C C + + C + + C + C C C ( o v e r l o a d i n g ) C C ( e n c a p s u l a t i o n ) C C
3 0 C C + +5 7 5 C C C C 30.7.1 A N S I C C GNU C 30-1 h e l l o. c C h e l l o. c c h e l l o. C h e l l o. c x x GNU C 30.7.2 C C C C e n u m c a s e i n l i n e C 30.7.3 C C + + C C 30 1 0, t m p p r i n t n u m t m p p r i n t n u m p r i n t n u p r i n t c h a r t m p p r i n t c h a r t m p p r i n t n u m p r i n t c h a r 30-10 1
576 L i n u x 5 a 30-11 p r i n t n u m p r i n t c h a r t m p t m, t m p m a i n 30-11 2 t m p t m p 1 234
3 0 C C + +5 7 7 5 1 234 a 1 234 C 30-11 m a i n t m p t m p r i n t C C C C++ UNIX p r i n t f I / O p r i n t f p r i n t f p r i n t f C C U N I X U N I X C C 30.7.4 C C C s t r c p y s t r n c p y C + + 30-12 p r i n t v a r
578 L i n u x 30-11, p r i n t c h a r 30-12 5 a C m a i n p r i n t v a r p r i n t v a s t d i o. h + M O D O R 30.7.5 C C C + + s t r u c t 30-13 30-3 C + + 30-13 C + + c o u t C p r i n t f
3 0 C C + +5 7 9 30-13 30-13 d i s p l a y d i s p l a y 1 i c e n s e d i s p l a y l i c e n s e d i s p l a y 30-14
580 L i n u x 30-14 c o u t c o u c i n c i n 30.8 C C C C 30.8.1 C 30-15 C + + 30-15 C + +
3 0 C C + +5 8 1 30-15 C i r c l e C i r c l e C i r c l C i r c l e a r e a C i r c l e ( C i r c l e ( d o u b l e )) v o i d C C i r c l e ( ) C i r c l e ~ C i r c l C i r c l e a r e a C i r c l e 30-15 m a i n m y c i r c l e C i r c l 2 m y c i r c l e C + + C i r c l e m y c i r c l e a r e a R e c t a n g l e a r e a 30.8.2 C C C
582 L i n u x 30-15 C i r c l e G U I C U N I X G U I I n t e r n e t W W W 30.9 GNU C/C GNU C/C U N I X C C 30-7 g c c C D - R O M 30-7 GNU C/C -x language ( C C ) - c ( ) - S ( ) (.s) file E ( ) -o file ( a. o u t ) -l library I directory i n c l u d e - w - p e d a n t i c A N S I - Wa l l - g ( g d b ) - g g d b ( g d b ) - p p r o ff - p g g r o ff - o 30.10 GNU egcs e g c s ( e g g s ) g c c C y g n u s
3 0 C C + +5 8 3 ( h t t p :// w w w. c y g n u s. c o m ) Red Hat 5.1 for Intel Red Hat Linux e g c s C y g n u s e g c s g c c e g c s 1 997 g c c F o r t r a n 77 e g c s J a v a j a v a g c j e g c s J a v a R e d Hat Linux http://sourceware.cygnus.com/java/compile.html e g c s J a v a L i n u x e g c s java ftp://egcs.cygnus.com/pub/egcs/snapshots/index.html L i n u x e g c s g c c C y g n u s g c c e g c s C y g n u e g c g c c 1 999 4 C y g n u s e g c s GNU gcc e g c s G C C Red Hat Linux 6.0 e g c s C C + + Red Hat5.1 5. 2 e g c s g c c Red Hat 5. 2 e g c s Red Hat 5.2 e g c s Red Hat 5.2 L i n u x L i n u r p m g l i n t e g c s g c c C + + M a k e f i l e e g c s g c c g c c e g c s g c c e g c s c c g c c g + + c + + e g c s g 77 30-8 Red Hat Linux 5.1 Red Hat U R L 30-8 Red Hat 5.1 5. 2 g c c e g c s c + + e g c s / u s r / b i n / c + + c c g c c / u s r / b i n / c c - > g c c ( ) e g c s e g c s / u s r / b i n / e g c s g + + e g c s / u s r / b i n / g + + g 77 e g c s / u s r / b i n / g 77 ( F o r t r a n 77 ) g c c g c c / u s r / b i n / g c c Red Hat Linux 5.2 g c c e g c s / u s r / l i b / g c c - l i b / i 386 - r e d h a t - l i n u x 2. 7. 2. 3 ( g c c ) e g c s - 2. 90. 29 ( e g c s ) 30-8 g c c e g c s - v e r s i o n
584 L i n u x e g c s C + + M a k e f i l e g c c Chris Cannam s wmx X11 X window 5 M a k e f i l e w m x M a k e f i l e CC = gcc CCC = gcc g c c e g c s M a k e f i l e C + + g + CC = gcc CCC = g++ e g c s C + +. C. c c. c x x M a k e f i l e e g c s e g c s L i n u x g c c e g c s C + + e g c s ( K D E ) 5 K D E egcs GNU Pascal / u s r / d o c / e g c s e g c s h t t p : / / w w w. g n u. o rg / s o f t w a r e / g c c / g c c. h t m l e g c s e g c s FA Q 3 0. 11 C C Sams Teach Yourself C in 21 Days,by Peter Aitken and Bradley Jones,Sams Publishing. C How to Program and C++ How to Program,by H.M.Deitel and P. J. D e i t e l. ( C / C + + ) The C Programming Language,by Brian Kernighan and Dennis Ritchie. ( )
3 0 C C + +5 8 5 The Annotated C++ Reference Manual,by Margaret Ellis and Bjarne Stroustrup. Programming in ANSI C,by Stephen G.Kochan. 30.12 U N I X C C C ANSI C C U N I X