Upload
asaf-ayoub
View
222
Download
1
Embed Size (px)
Citation preview
7/25/2019 Amiga C for Beginners
1/308
7/25/2019 Amiga C for Beginners
2/308
7/25/2019 Amiga C for Beginners
3/308
A m i g a
r B e g i n n e r s
S c h a u n
D a t a B e c k e r B o o k
7/25/2019 Amiga C for Beginners
4/308
F o u r t h P r i n t i n g 1 9 9 0
P r i n t e d U . S . A .
C o p y r i g h t
1 9 8 9 1 9 9 0
A b a c u s
5 3 7 0 5 2 n d S t r e e t S E
G r a n d R a p i d s
M I
4 9 5 1 2
C o p y r i g h t
1 9 8 7 1 9 8 8
D a t a B e c k e r G m b H
M e r o w i n g e r s t r a s s e 3 0
4 0 0 0 D u e s s e l d o r f W e s t G e r m a n y
T h i s b o o k c o p y r i g h t e d N o
p a r t
t h i s b o o k m a y r e p r o d u c e d s t o r e d r e t r i e v a l
s y s t e m
t r a n s m i t t e d a n y f o r m
b y m e a n s e l e c t r o n i c
m e c h a n i c a l
p h o t o c o p y i n g
r e c o r d i n g o r o t h e r w i s e w i t h o u t t h e p r i o r w r i t t e n p e r m i s s i o n o f A b a c u s
D a t a
B e c k e r
G m b H
E v e r y e f f o r t b e e n m a d e e n s u r e c o m p l e t e a n d a c c u r a t e i n f o r m a t i o n c o n c e r n i n g
m a t e r i a l p r e s e n t e d
t h i s b o o k H o w e v e r A b a c u s n e i t h e r g u a r a n t e e n o r b e h e l d l e g a l l y
r e s p o n s i b l e
m i s t a k e s
p r i n t i n g
f a u l t y i n s t r u c t i o n s
c o n t a i n e d
t h i s
b o o k
T h e
a u t h o r s a l w a y s
a p p r e c i a t e r e c e i v i n g
n o t i c e e r r o r s
m i s p r i n t s
A m i g a B A S I C t r a d e m a r k r e g i s t e r e d t r a d e m a r k M i c r o s o f t C o r p o r a t i o n
A m i g a
5 0 0
A m i g a
1 0 0 0 A m i g a 2 0 0 0 A m i g a C 6 4
t r a d e m a r k s r e g i s t e r e d t r a d e m a r k s
C o m m o d o r e A m i g a L a t t i c e C L a t t i c e t r a d e m a r k s o r r e g i s t e r e d t r a d e m a r k s
L a t t i c e C o r p o r a t i o n
A z t e c C A z t e c t r a d e m a r k s r e g i s t e r e d t r a d e m a r k s
M a n x
S o f t w a r e S y s t e m s I B M t r a d e m a r k r e g i s t e r e d t r a d e m a r k o f I n t e r n a t i o n a l B u s i n e s s
M a c h i n e s I n c A t a r i
S T t r a d e m a r k
r e g i s t e r e d
t r a d e m a r k
A t a r i C o r p o r a t i o n
I S B N
1 5 5 7 5 5 0 4 5 X
7/25/2019 Amiga C for Beginners
5/308
T a b l e
o f C o n t e n t s
I n t r o d u c t i o n
P r o g r a m
E x e c u t i o n
4
C o m p i l e r I n t e r p r e t e r
B e g i n n i n g
T h e
E d i t o r
T h e C o m p i l e r
T h e L i n k e r 1 2
P u t t i n g
T o g e t h e r
T h e F i r s t P r o g r a m
U s i n g
E
C o m p i l i n g
E r r o r M e s s a g e s
T h e o r y P r a c t i c e
P r o g r a m F o r m a t
D e f i n i n g F u n c t i o n
p r i n t f a n d E s c a p e S e q u e n c e s
C o m m e n t s
V a r i a b l e s A r i t h m e t i c
I n t e g e r s
T h e
i f
s t a t e m e n t
4 5 3 C a l c u l a t i n g
w i t h
F l o a t i n g
P o i n t N u m b e r s
C h a r a c t e r s C h a r a c t e r S t r i n g s
L o o p s
4
w h i l e L o o p s
f o r L o o p s 4 8
d o w h i l e L o o p s
M o r e
E r r o r C h e c k i n g
A N D
O R
S t r i n g s
B a c k t r a c k i n g
C a l c u l a t i n g C
V a r i a b l e s
V a r i a b l e
N a m e s
D a t a
T y p e s
T y p e
C o n v e r s i o n 7
T h e c a s t O p e r a t o r . . . . . . . . . 7 1
H i
7/25/2019 Amiga C for Beginners
6/308
p r i n t f a n d s c a n f 7 3
M o r e E s c a p e S e q u e n c e s 7 5
F o r m a t
S p e c i f i c a t i o n 7 7
O c t a l
a n d
H e x a d e c i m a l 8
9 . 3 . 1
C o n v e r s i o n
P r o g r a m 8 2
C h a r a c t e r
C o d e s 8 4
9 . 4 . 1 A b o u t B a c k s l a s h 8 5
9 . 4 . 2 G o i n g O t h e r D i r e c t i o n 8 6
T h e
P r e p r o c e s s o r
1 0 . 1 d e f i n e
8 9
1 0 . 2 i n c l u d e
A b b r e v i a t i o n s 9 3
1 1 . 1
I n c r e m e n t D e c r e m e n t 9 7
1 1 . 2 I n i t i a l i z a t i o n
D e f i n i t i o n
D e c l a r a t i o n
9 9
1 1 . 3
M u l t i p l e
A s s i g n m e n t s
a n d
D i r e c t i v e
V a l u e
C
F u n c t i o n s
1 2 . 1 F u n c t i o n s w i t h A r g u m e n t s
1 2 . 2 F u n c t i o n s w i t h o u t R e t u r n V a l u e s
1 2 . 3
O t h e r F u n c t i o n s
1 2 . 3 . 1
s t r c p y V e r s i o n
1 2 . 3 . 2
s t r l e n
A r r a y s
1 3 . 1
M u l t i - d i m e n s i o n a l
A r r a y s 1 1 6
M o r e
a b o u t
L o o p s
1 4 . 1 M o r e a b o u t
f o r
L o o p
1 4 . 2 b r e a k
1 4 . 3
c o n t i n u e
1 4 . 4 T h e s w i t c h D i r e c t i v e
P o i n t e r s a n d A d d r e s s e s
1 5 . 1
A d d r e s s e s
1 5 . 2 P o i n t e r s 1 3 3
1 5 . 2 . 1 T h e E x c h a n g e F u n c t i o n w i t h P o i n t e r
1 5 . 2 . 2
s t r c o p y V e r s i o n 2
1 5 . 2 . 3 s t r c o p y V e r s i o n
1 5 . 3 P o i n t e r w i t h o u t S t o r a g e 1 3 8
S t o r a g e C l a s s e s
1 6 . 1 u t o
1 6 . 2 S t a t i c
1 6 . 3
E x t e r n a l
1 6 . 4 R e g i s t e r
1 6 . 4 . 1
F a s t s t r c p y
R o u t i n e 1 4 7
1 6 . 5
L o c a l
7/25/2019 Amiga C for Beginners
7/308
U s e r d e f i n e d L i b r a r i e s .
1 7 . 1
T h e s t r c m p F u n c t i o n .
. 1 5 1
. 1 5 4
1 7 . 2
I t o a
1 7 . 3 R e v e r s e
C F e a t u r e s
1 8 . 1 T h e ? : O p e r a t o r
T h e s i z e o f F u n c t i o n
M a n i p u l a t i o n
1 8 3 1
A N D 1 6 5
1 8 . 3 . 2 O R
6 6
1 8 3 3
B i t w i s e S h i f t O p e r a t o r s
A 1 6 7
1 8 3 4 E X C L U S I V E O R
1 8 . 3 . 5 O n e s C o m p l e m e n t
1 8 . 4 G o t o
. 1 6 8
. 1 6 9
C o m p l e x
D a t a
T y p e s
1 9 . 1
S t r u c t
B i t F i e l d s
1 9 . 3
U n i o n s
1 9 . 4
n u m
I . . . . 1 7 7
1 9 . 5 T y p e d e f A 1 7 8
I m p o r t a n t C o n c e p t s
D e c l a r a t i o n s
\
2 0 . 2 I n i t i a l i z a t i o n
2 1 . P o i n t e r
A r r a y s
U s e f u l M a c r o s
2 2 . 1 M a c r o
E r r o r S o u r c e s
A
2 2 . 2
L i b r a r y M a c r o s
A
C o m m u n i c a t i o n
Y
2 0 1
2 3 . 1
P a s s i n g D a t a
w i t h c l i \
B u f f e r e d I n p u t / O u t p u t X 2 0 6
M o r e B u f f e r e d I n p u t / O u t p u t
\ .
U n b u f f e r e d I n p u t / O u t p u t \ .
D i r e c t A c c e s s . V 2 1 6
R e a d i n g
C h a r a c t e r
2 1 8
2 3 6 1 S t a n d a r d I n p u t / O u t p u t \
2 3 . 7
U s e r W i n d o w
2 3 7 1 T h e T h r e e W i n d o w s . \
2 3 . 8
R e d i r e c t i o n
2 4 . T r i c k s
T i p s . 2 2 5
2 4 . 1 S t a r t i n g
f r o m W o r k b e n c h 2 2 7
2 4 . 2
O t h e r
P r e p r o c e s s o r D i r e c t i v e s
2 4 . 3 F i n d i n g R e m o v i n g E r r o r s
7/25/2019 Amiga C for Beginners
8/308
S y s t e m P r o g r a m m i n g 2 3 3
T h e I n t u i t i o n P r i n c i p l e 2 3 5
W i n d o w u n d e r I n t u i t i o n 2 3 6
2 5 2 1 T h e W i n d o w
R a g s
2 3 7
2 5 2 2
O p e n i n g
W i n d o w
2 3 8
2 5 2 3
W i n d o w P r o g r a m 2 3 9
S c r e e n s 2 4 2
2 5 3 1
S c r e e n P r o g r a m 2 4 3
2 5 4 T e x t G r a p h i c
W i n d o w
D i s p l a y 2 4 6
2 5 4 1 T e x t 2 4 6
2 5 4 2
M o v e 2 4 6
2 5 4 3 D r a w 2 4 7
2 5 4 4 S m a l l D r a w i n g P r o g r a m 2 4 8
2 5 4 5 L o w R e s o l u t i o n a n d I n t e r l a c e M o d e s 2 5 2
2 5 4 6
P i x e l P r o c e s s i n g 2 5 3
D O S
2 5 7
S e t
o m m e n t
2 5 8
R e a d
D i r e c t o r y 2 5 9
C o n c l u s i o n
2 6 2
A p p e n d i c e s 2 6 3
F u n c t i o n s 2 6 5
T h e H i s t o r y o f 2 7
C
T h e
L a t t i c e
C o m p i l e r 2 7 2
D T h e
A z t e c C o m p i l e r 2 7 3
R e s e r v e d
W o r d s 2 7 6
F O p e r a t o r
P r e c e d e n c e
2 7 7
G S t o r a g e
C l a s s e s
2 7 8
H T y p e C o n v e r s i o n s 2 7 8
M o d e s f
o p e n
2 7 9
I n d e x
7/25/2019 Amiga C for Beginners
9/308
n t r o d u t i o n t
7/25/2019 Amiga C for Beginners
10/308
7/25/2019 Amiga C for Beginners
11/308
A b a c u s I n t r o d u c t i o n t o
I n t r o d u c t i o n t o
S o
y o u w a n t l e a r n C . T h a t s o b v i o u s , y o u w o u l d n t b e
r e a d i n g
t h i s b o o k . T h e g o a l t h i s
b o o k
h e l p y o u l e a r n p r o g r a m
o n
A m i g a l i t t l e t i m e p o s s i b l e .
A m i g a
B e g i n n e r s
w r i t t e n s h o r t
c o u r s e l a n g u a g e a n y o n e
w h o w t s
l e a r n
a b o u t
l a n g u a g e f r o m s c r a t c h ,
w i t h o u t a t e c h n i c a l
j a r g o n .
T h i s b o o k d i v i d e d r o u g h l y i n t o t w o p a r t s . T h e f i r s t p a r t i n t r o d u c e s
r e a d e r b a s i c
s t r u c t u r e s
p r o g r a m m i n g t h r o u g h o p e r a t i n g
e d i t o r , c o m p i l e r l i n k e r . a l s o c o n t a i n s m a n y s a m p l e p r o g r a m s .
Y o u l l
a b l e
w r i t e
y o u r
o w n
s h o r t
p r o g r a m s
o n l y
f e w
h o u r s .
T h i s f i r s t p a r t
a l s o t a k e s
b e g i n n i n g p r o g r a m m e r t h r o u g h
e s s e n t i a l s o f C c a l c u l a t i o n s , s t r i n g
h a n d l i n g ,
l o o p s a n d m o r e . e v e n
h e l p s y o u
f i n d
e r r o r s m a d e m o s t o f t e n b y n e w
p r o g r a m m e r s
T h e s e c o n d p a r t , w h i c h b e g i n s C h a p t e r e x p l a i n s
b a c k g r o u n d
a n d p e c u l i a r i t i e s e a c h s t a t e m e n t a n d f u n c t i o n . T h e s e i n c l u d e
p r e p r o c e s s o r c o m m a n d s a r r a y s ,
l o o p s ,
p o i n t e r s , a d d r e s s e s a n d m e m o r y
c l a s s e s . I f t h e s e w o r d s d o n t m e a n a n y t h i n g y o u n o w t h e y w i l l w h e n
y o u s t a r t r e a d i n g s e c o n d s e c t i o n .
T h e s e c o n d p a r t a l s o
d i s c u s s e s
m a c r o s , i n t e r f a c i n g y o u r A m i g a
o u t s i d e w o r l d , t r i c k s a n d t i p s f o r t h e l a n g u a g e a n d g r a p h i c
g r a m m i n g
T h e a p p e n d i c e s
d e s c r i b e h i s t o r y
a n d d e v e l o p m e n t l a n g u a g e ,
w e l l o p e r a t i n g
i n s t r u c t i o n s f o r
n u m b e r p o p u l a r
c o m p i l e r s
y o u r
c o m p i l e r s
i n s t r u c t i o n
m a n u a l , s i n c e
m a n y c o m p i l e r s
c o n s t a n t l y b e i n g u p g r a d e d ) . I n a d d i t i o n , y o u l l f i n d n u m b e r p r a c t i
C f u n c t i o n s , m a t h e m a t i c a l p r e c e d e n c e , r e s e r v e d C k e y w o r d s ,
m e m o r y c l a s s e s a n d t y p e c o n v e r s i o n s .
T h i s c h a p t e r d e s c r i b e s g e n e r a l n a t u r e
C . Y o u l l s e e
a d v a n t a g e s
d i s a d v a n t a g e s
c o m p a r e d
i n t e r p r e t e d
l a n g u a g e s , w e l l a d v a n
t a g e s
d i s a d v a n t a g e s c o m p a r e d
o t h e r c o m p i l e d l a n g u a g e s .
Y o u l l
a l s o w h y
s t a n d s a b o v e m a n y o t h e r
c o m p u t e r l a n g u a g e s .
7/25/2019 Amiga C for Beginners
12/308
I n t r o d u c t i o n C m i g a C B e g i n n e r s
1 1 P r o g r a m E x e c u t i o n
B e f o r e s t a r t i n g w e n e e d
q u e s t i o n :
W h a t
C ?
T h e r e t w o
k i n d s
c o m p u t e r l a n g u a g e s .
F i r s t ,
t h e r e a r e i n t e r p r e t e d
l a n g u a g e s s u c h B A S I C a n d L O G O S e c o n d , t h e r e a r e c o m p i l e d
l a n g u a g e s s u c h P a s c a l o r M o d u l a 2 . S e c t i o n
c o n t a i n s d e t a i l e d
i n f o r m a t i o n a b o u t
a d v a n t a g e s d i s a d v a n t a g e s
i n t e r p r e t e r s a n d
c o m p i l e r s .
C o m p i l e r s
C o m p i l e r s p r o g r a m s
w h i c h
t r a n s l a t e l a n g u a g e s t a t e m e n t s
i n t o
f o r m
u n d e r s t a n d a b l e c o m p u t e r . T h i s
f o r m
c o n s i s t s
n u m b e r s 0 a n d n u m b e r s u s e d i n t h e b i n a r y s y s t e m ) . S i n c e p e o p l e
c a n t r e m e m b e r
l o n g s t r i n g s z e r o s o n e s , t h e c o m p u t e r t o l d
i n t e r p r e t
w o r d s a n d o t h e r n u m b e r
s y s t e m s b i n a r y
n u m b e r s .
F o r
e x a m p l e , a
t y p i c a l
m a c h i n e
l a n g u a g e i n s t r u c t i o n
L D m e a n s L o a d
A c c u m u l a t o r ,
w h i c h
e a s i e r
r e m e m b e r
t h a n b i n a r y n u m b e r
1 0 0 1 1 1 0 1 .
T h e c o m p u t e r m u s t c o n t a i n a c e n t r a l p r o c e s s i n g u n i t C P U )
r e s p o n d
m a c h i n e l a n g u a g e i n s t r u c t i o n a v a i l a b l e r e s p o n s e e v e r y
k e y w o r d .
P r o g r a m m i n g w i t h b i n a r y
n u m b e r s
c a l l e d m a c h i n e
l a n g u a g e
p r o g r a m m i n g .
U s i n g m a c h i n e
l a n g u a g e m n e m o n i c s
i n s t r u c t i o n s c a l l e d
a s s e m b l y
l a n g u a g e . T h e i n s t r u c t i o n w h i c h
e x e c u t e s o n o n e c o m p u t e r m a y e v e n e x i s t o n a n o t h e r c o m p u t e r .
w o u l d e a s i e r f o r t h e p r o g r a m m e r c o m p u t e r c o u l d t o l d i n
p l a i n E n g l i s h
w h a t N e e d l e s s t o s a y , c o m p u t e r l a n g u a g e s h a v e n t
r e a c h e d
l e v e l
D W I M D o
W h a t
M e a n )
i n t e r f a c e
T h i s t y p e
l a n g u a g e m a y e x i s t f e w
y e a r s
f r o m
n o w , w h e n
t e c h n o l o g y p r o d u c e s
m o r e h e l p f u l d e v e l o p m e n t s
u s i n g
a r t i f i c i a l i n t e l l i g e n c e .
H i g h l e v e l l a n g u a g e s
c o m p r o m i s e
b e t w e e n m a c h i n e
l a n g u a g e
h u m a n l a n g u a g e . T h e s e l a n g u a g e s c o n t a i n l i m i t e d n u m b e r
s t a t e m e n t s
k e y w o r d s w h i c h
t u r n
e x e c u t e
s p e c i f i c
t a s k s
U n l i k e
a s s e m b l y l a n g u a g e , m a n y
t h e s e
l a n g u a g e s a r e n t t a i l o r e d t o s p e c i f i c
c o m p u t e r . T h e c o m p u t e r m u s t e x e c u t e s e v e r a l h u n d r e d m a c h i n e
i n s t r u c t i o n s f o r
e v e r y s i n g l e s t a t e m e n t h i g h l e v e l l a n g u a g e . A n
e x a m p l e w o u l d B A S I C c o m m a n d L O A D F i l e n a m e , w h i c h
t e l l s c o m p u t e r
l o a d a
f i l e
7/25/2019 Amiga C for Beginners
13/308
A b a c u s
2 C o m p i l e r I n t e r p r e t e r
1 2
C o m p i l e r v s .
I n t e r p r e t e r
A n
i n t e r p r e t e r
A s
p r e v i o u s l y
m e n t i o n e d , t w o t y p e s o f h i g h e r l e v e l l a n g u a g e s e x i s t :
I n t e r p r e t e d c o m p i l e d . A n i n t e r p r e t e r
s e a r c h e s
k e y w o r d s
p r o g r a m t e x t o r s o u r c e , v e r i f i e s
t h a t c o m m a n d l e g a l
o n e a n d
e x e c u t e s e q u i v a l e n t m a c h i n e
l a n g u a g e
i n s t r u c t i o n s . T h e n
i n t e r p r e t e r s e a r c h e s
n e x t
c o m m a n d
t e s t s
e x e c u t e s
m a c h i n e i n s t r u c t i o n , e t c .
T h i s t r a n s l a t i o n p r o c e s s p e r f o r m e d i n t e r p r e t e r b e c o m p a r e d
w o r k h u m a n
f o r e i g n
l a n g u a g e
i n t e r p r e t e r .
A n i n t e r p r e t e r
t r a n s l a t o r
w h i c h
t r a n s l a t e s
w o r d s
h i g h e r
l e v e l
l a n g u a g e
i n t o
m a c h i n e
l e v e l i n s t r u c t i o n s n e e d e d .
A
c o m p i l e r
A c o m p i l e r t r a n s l a t e s
s o u r c e p r o g r a m
o n c e
i n t o
e x e c u t a b l e f o r m .
T h i s
s i m i l a r
s o m e o n e w h o
t r a n s l a t e s
f o r e i g n l a n g u a g e l i t e r a t u r e
i n t o h i s / h e r
o w n
l a n g u a g e . T h i s t r a n s l a t o r t a k e s t h e t i m e t o s e l e c t
p r o p e r
c h o i c e w o r d s
f o r t h e
t e x t , u n l i k e
i n t e r p r e t e r
w h o
m e d i a t e s
a c o n v e r s a t i o n b e t w e e n
t w o p e o p l e
f r o m d i f f e r e n t l a n g u a g e b a c k
g r o u n d s .
T h e i n t e r p r e t e r e x e c u t e s p r o g r a m s i m m e d i a t e l y .
i n t e r p r e t e r a l s o
s t o p p e d u s e r
c h e c k c e r t a i n
v a l u e s
s t o r e d c e r t a i n v a r i
a b l e s . I n t e r p r e t e d p r o g r a m e x e c u t i o n u s u a l l y c o n t i n u e d w i t h o u t
c a u s i n g
p r o b l e m s . T h e m a i n a d v a n t a g e s o f i n t e r p r e t e d l a n g u a g e s
f l e x i b i l i t y a n d s p o n t a n e i t y .
T h e c o m p i l e r t r a n s l a t e s p r o g r a m s o u r c e o n l y o n c e . T h e c o m p i l e r
m a y s p e n d
m i n u t e s c o m p i l i n g
p r o g r a m b e f o r e
e x e c u t e d .
A f t e r w a r d s ,
c o m p i l e d
p r o g r a m e x e c u t e s
m u c h f a s t e r t h a n
i n t e r p r e t e d
p r o g r a m , s i n c e t h e
c o m p i l e r d o e s n t
h a v e
r e - t r a n s l a t e
s o u r c e p r o g r a m .
T h i s
a d v a n t a g e b e c o m e s
m o s t
e v i d e n t
p r o g r a m
l o o p s w h i c h c o m m a n d
e x e c u t e d s e v e r a l
t h o u s a n d t i m e s . T h e
i n t e r p r e t e r
t r a n s l a t e s c o m m a n d i n t o m a c h i n e l a n g u a g e , r e p e a t i n g
t h i s
p r o c e s s
t h o u s a n d
t i m e s .
T h e
c o m p i l e d
p r o g r a m
a l r e a d y
k n o w s w h a t
w i t h o u t
r e p e a t i n g
t r a n s l a t i o n .
T h e a d v a n t a g e s
c o m p i l e d l a n g u a g e s s h o r t e r e x e c u t i o n
t i m e s
c o m p i l e d
p r o g r a m s
I n t e r p r e t e r s ,
b e c a u s e
o f e a s y a c c e s s
t h e i r
p r o g r a m s ,
p r o g r a m
m e r e n t e r c o r r e c t i o n s m o d i f i c a t i o n s f l y . T h e y a l s o
p r o g r a m m e r e n t e r
e x e c u t e
p r o g r a m c o d e u n t i l
e r r o r
o c c u r s .
T h i s
r u n - u n t i l - i t - b r e a k s - t h e n - f i x - i t
a t t i t u d e
c a u s e s
l a z y , u n s t r u c t u r e d p r o -
g r a m m i n g s t y l e .
7/25/2019 Amiga C for Beginners
14/308
7/25/2019 Amiga C for Beginners
15/308
B e g i n n i n g
7/25/2019 Amiga C for Beginners
16/308
7/25/2019 Amiga C for Beginners
17/308
7/25/2019 Amiga C for Beginners
18/308
B e g i n n i n g
C A m i g a
C f o r B e g i n n e r s
2 . 1 T h e
E d i t o r
Y o u n e e d s o m e
s o r t t e x t e d i t o r
e n t e r
p r o g r a m
f r o m
k e y b o a r d . A n e d i t o r n o t h i n g
m o r e
t h a n s i m p l e w o r d
p r o c e s s o r .
u s u a l l y c o n t a i n s o n l y
m i n i m a l
t e x t p r o c e s s i n g c a p a b i l i t i e s .
T h e
p r o g r a m u s u a l l y
o n l y
a l l o w s
y o u t y p e
l o a d ,
s a v e a n d e d i t t e x t
s o u r c e
c o d e : N o t h i n g
f a n c y l i k e b l o c k f u n c t i o n s o r s a v e
r e p l a c e
c a p a b i l i t i e s .
M o s t w o r d p r o c e s s o r p r o g r a m s b e u s e d t y p i n g t e x t
p r o g r a m . y o u w o r d p r o c e s s o r , y o u m a y e n t e r s p e c i a l
c o n t r o l c h a r a c t e r s
( e . g . ,
b o l d
f o n t s
t e x t
f o r m a t t i n g
b e c a u s e
C
c o m p i l e r w o u l d r e c o g n i z e
t h e m . M a n y
w o r d
p r o c e s s o r s p r o v i d e
o p t i o n
l e t t i n g y o u
s a v e f i l e
A S C I I
f i l e .
w o r d p r o c e s s o r e d i t o r ,
m u s t
a l l o w e n t e r
s p e c i a l
c o n t r o l
c h a r a c t e r s n e e d e d
C
s o u r c e c o d e s .
C p r o g r a m s
b r a c e s
( { } ) , b r a c k e t s
( D ) , b a c k s l a s h n u m b e r s i g n p i p e
c h a r a c t e r t i l d e c h a r a c t e r ( ~ ) .
M a y b e c a n t a f f o r d w o r d p r o c e s s o r ,
m a y b e y o u r
w o r d p r o c e s s o r
d o e s n t
h a v e n e c e s s a r y c h a r a c t e r s . T h e W o r k b e n c h d i s k
w h i c h c o m e s
w i t h y o u r A m i g a c o n t a i n s e d i t o r n a m e d E D b a s i c t e x t
e d i t o r ,
w h i c h
f i n d
W o r k b e n c h
d i s k
A m i g a
f r o m
C L i
I n v o k e e d i t o r
e n t e r i n g t h e
C L i t y p i n g
e d
n a m e
f i l e
y o u w a n t
l o a d / e d i t , p r e s s
< R e t u r n >
k e y .
T h e e d i t o r l o a d e d a n d t h e n
C
p r o g r a m t y p e d T h i s
t e x t ,
c a l l e d C s o u r c e c o d e , s t o r e d o n d i s k u n d e r a f i l e n a m e . T h e c h a r a c
t e r i s t i c t h a t s e t s
t h i s
a p a r t f r o m n o r m a l
w o r d
p r o c e s s i n g f i l e s a p p e a r s
f i l e
e x t e n s i o n : C s o u r c e c o d e s m u s t
c o n t a i n f i l e
e x t e n s i o n
E x a m p l e s n a m e s
s o r t c a r c h i v e c ;
n o t e t h a t t h e s e
n a m e s
i n d i c a t e c o n t e n t s e a c h
f i l e .
m e a n i n g f u l
n a m e s
l i k e
t h i s i n s t e a d c r y p t i c
n a m e s l i k e
t h i s . c .
T h e
e x t e n s i o n
e s p e c i a l l y
i m p o r t a n t , s i n c e
s e v e r a l
f i l e s w i t h
s a m e n a m e
d i f f e r e n t
e x t e n s i o n s
g e n e r a t e d b y C c o m p i l e r . A f t e r f i l e i s c r e a t e d
s a v e d ,
y o u
t h e n
c a l l C c o m p i l e r
c o m p i l e
C s o u r c e
c o d e .
1 0
7/25/2019 Amiga C for Beginners
19/308
A b a c u s T h e o m p i l e r
2 2 h e
C o m p i l e r
C a l l i n g c o m p i l e r
l o a d s C
c o m p i l e r i n t o
m e m o r y T h e
c o m p i l e r
r e a d s
s o u r c e
c o d e b e g i n s
c o n v e r t
s o u r c e
c o d e i n t o
c o m p i l e d m a c h i n e l a n g u a g e . M o s t c o m p i l e r s r e a d s o u r c e c o d e t w i c e
p a s s
c o m p i l e r ) . D u r i n g f i r s t p a s s , e n c o u n t e r s i n v a l i d
e x p r e s s i o n k e y w o r d s t o p s c o m p i l i n g
a n d d i s p l a y s e r r o r
m e s s a g e o n s c r e e n w r i t e s t h e e r r o r d i s k m e s s a g e f i l e
W h e n e v e r
e r r o r f o u n d , y o u m u s t r e l o a d
e d i t o r
a n d c o r r e c t t h e
s o u r c e c o d e . O n c e y o u v e f i x e d e r r o r s y o u s a v e s o u r c e c o d e f i l e
e x i t e d i t o r
a n d
r e s t a r t
c o m p i l e r .
c o m p i l e r
f i n d s
e r r o r s
a g a i n , y o u m u s t r e p e a t a b o v e p r o c e d u r e s .
B e f o r e
g o i n g f a r t h e r
y o u s h o u l d
r e a l i z e
o n e t h i n g .
W r i t i n g
s o u r c e c o d e r e q u i r e s p r o p e r p r e p a r a t i o n . y o u j u s t e n t e r s o u r c e c o d e
w i t h o u t
g i v i n g a n y t h o u g h t
w h a t y o u r e t y p i n g y o u l l s p e n d
m o r e t i m e l e a r n i n g a b o u t e r r o r m e s s a g e s e d i t o r t h a n w i l l
s p e n d l e a r n i n g a b o u t
l a n g u a g e . I n t h e b e g i n n i n g , p r e p a r e
p l e n t y
e r r o r s a n d b e
p a t i e n t w i t h y o u r s e l f
y o u g o
f r o m
c o m p i l e r
e d i t o r c o m p i l e r .
W h e n y o u v e c o r r e c t e d t h e e r r o r s s o u r c e
c o d e , c o m p i l e r
f i n i s h f i r s t p a s s w i t h o u t s t o p p i n g a n d p e r f o r m s s e c o n d p a s s .
T h i s s e c o n d p a s s d o e s f i n a l t r a n s f o r m a t i o n i n t o o b j e c t c o m p i l e d )
c o d e .
T h e
c o m p i l e r s a v e s
t h e o b j e c t
c o d e d i s k
u n d e r
s a m e
n a m e
a s t h e
s o u r c e
c o d e , w i t h e x t e n s i o n
e x a m p l e , s o u r c e
c o d e
n a m e d
s o u r c e c g e n e r a t e s o b j e c t c o d e f i l e
n a m e d s o u r c e o
T h e
o b j e c t
f i l e
n e e d s
m o r e
s t e p
b e f o r e
b e c o m e
e x e c u t a b l e
p r o g r a m c o d e t h i s l i n k e r .
1 1
7/25/2019 Amiga C for Beginners
20/308
B e g i n n i n g
C
A m i g a
C
f o r B e g i n n e r s
2 . 3 T h e L i n k e r
W e r e d o n e
q u i t e
T h e o b j e c t f i l e
m u s t s t i l l
r u n t h r o u g h
l i n k e r .
T h e l i n k e r s e a r c h e s
f u n c t i o n s
u s e d
b y
p r o g r a m f r o m
l i b r a r i e s , a n d
l i n k s n e c e s s a r y f u n c t i o n s
i n t o p r o g r a m .
F u n c t i o n s
f u n c t i o n
s u b r o u t i n e s i m i l a r a p r o c e d u r e P a s c a l .
F u n c t i o n s
c a p a b l e s o l v i n g s m a l l t a s k s
s u c h d r a w i n g l i n e
d i s p l a y i n g
c h a r a c t e r o n s c r e e n . T h e l i b r a r i e s c o n t a i n e d m o s t C c o m p i l e r
p a c k a g e s
i n c l u d e f r e q u e n t l y u s e d f u n c t i o n s s t o r e d o b j e c t c o m p i l e d )
f o r m . T h e s e f u n c t i o n s
c o u l d
i n p u t / o u t p u t
f u n c t i o n s ,
g r a p h i c
t i n e s ,
s o u n d
r o u t i n e s
e v e n
t r i g o n o m e t r i c
f u n c t i o n s .
T h e l i n k e r i d e n t i f i e s f u n c t i o n s
r e q u i r e d
a c o m p l e t e p r o g r a m
a n d
a d d s t h e m m a i n p r o g r a m . T h i s s a v e s p r o g r a m m e r o f w o r k .
T h e f u n c t i o n s s i m p l y r e q u i r e p a s s i n g
v a l u e s
i n s t e a d
r e t y p i n g
s o u r c e
c o d e
e a c h f u n c t i o n f r o m
s c r a t c h .
T h e
l i n k e r
p e r m i t s
d e v e l o p m e n t l a r g e p r o g r a m s
m o d u l a r
f o r m . T h i s
m n s
t h a t s e v e r a l
p a r t s
o f t e n a r e
d e v e l o p e d
s e p a r a t e l y . T h e u s e r c a n c o m p i l e t e s t
e v e r y
m o d u l e s e p a r a t e l y .
T h i s
a d v a n t a g e
t h a t
c o m p l e t e
p r o g r a m d o e s n t h a v e
l o a d e d r e c o m p i l e d e v e r y t i m e c o m p i l e r
d e t e c t s
e r r o r .
T h e
l i n k e r e v e n t u a l l y l i n k s c o m p i l e d m o d u l e s i n t o c o m p l e t e ,
e x e c u t a b l e
p r o g r a m .
T h e l i n k e r
c a n n o t h a n d l e n o n - c o m p i l e d s o u r c e c o d e .
o n l y l i n k
c o m p i l e d f u n c t i o n s t o g e t h e r . S o u r c e c o d e s l o a d o t h e r s o u r c e c o d e s
d u r i n g c o m p i l a t i o n ,
w e l l
m o r e o n t h i s l a t e r .
7/25/2019 Amiga C for Beginners
21/308
A b a c u s
P u t t i n g t o g e t h e r
4 P u t t i n g I t
A l l
T o g e t h e r
T h e C L I T h e A m i g a s C L I C o m m a n d L i n e I n t e r f a c e ) u s e d s p e c i f y t h e
p a r a m e t e r s
e d i t o r ,
C c o m p i l e r C
l i n k e r . e x a m p l e ,
e n t e r i n g
t h e f o l l o w i n g l i n e i n
C L I c a l l s
L a t t i c e
C l i n k e r :
A L I N K
f i l e l o f i l e o
T O
c o m p l e t e
Y o u a l r e a d y k n o w t h a t p r o g r a m m a y h a v e b e c o m p i l e d s e v e r a l
t i m e s
b e f o r e f r e e
e r r o r s
s y n t a x e r r o r s ,
l o g i c a l
e r r o r s .
Y o u
m u s t e n t e r t h e
a b o v e l i n e e x a c t l y
w r i t t e n .
E n t e r i n g l i n e
i n c o r r e c t l y
c a u s e
e r r o r s i n
i t s e l f .
T h e
d e v e l o p e r s
m o s t
C
c o m p i l e r s t o o k
t h i s
i n t o
c o n s i d e r a t i o n , a n d
a d d e d
s p e c i a l f e a t u r e
a l l o w e a s y
l i n k e r
a c c e s s
f r o m
t e x t f i l e s .
T h e M A K E
f i l e
T h e i n p u t s r e q u i r e d
c o m p i l e a n d
l i n k C
s o u r c e
c o d e
b e
w r i t t e n
f i l e c a l l e d a m a k e f i l e . T h i s m a k e f i l e c a l l s n e c e s s a r y
p r o g r a m s s u c h a s t h e c o m p i l e r l i n k e r . T h e C s y s t e m r e a d s f i l e
j u s t
u s e r h a d
i n p u t
t e x t d i r e c t
r o
k e y b o a r d .
e a s y
c r e a t e
m a k e f i l e .
I n s t e a d
e x e c u t i n g , t h e C c o m p i l e r
c a l l s d i r e c t l y . Y o u i n v o k e t h e e d i t o r w r i t e c a l l s s c r i p t f i l e .
O n c e y o u s a v e t h i s f i l e t o d i s k , y o u n o w h a v e a M A K E f i l e .
A m i g a D O S E x e c u t e c o m m a n d r e a d s
t h i s f i l e
a n d p a s s e s i n f o r m a
t i o n t o
C
c o m p i l e r s e c t i o n s n e e d e d
m a k e f i n a l e x e c u t a b l e
p r o g r a m .
A p p e n d i x C o n e e x a m p l e m a k e f i l e
c o n t e n t s .
1 3
7/25/2019 Amiga C for Beginners
22/308
7/25/2019 Amiga C for Beginners
23/308
h e F i r s t r o g r a m
7/25/2019 Amiga C for Beginners
24/308
7/25/2019 Amiga C for Beginners
25/308
A b a c u s T h e
F i r s t
P r o g r a m
3
T h e F i r s t P r o g r a m
T h e
f o l l o w i n g c o d e f i r s t C
l a n g u a g e p r o g r a m . D o n t e n t e r
y e t y o u l l t y p e f e w m i n u t e s
s t a r t i n g
S e c t i o n 3 . 1 .
H e r e s
s o u r c e c o d e y o u w h a t l o o k s l i k e :
# i n c l u d e < s t d i o . h >
v o i d m a i n )
p r i n t f ( H e l l o ,
h e r e ) ;
T o
w h a t p r o g r a m
p r o d u c e s
t e x t
m u s t
b e
e n t e r e d u s i n g
a n
e d i t o r .
W h e n y o u
e d i t o r
p l e a s e e n t e r t h e t e x t e x a c t l y
p r i n t e d h e r e a n d S e c t i o n 3 . 1 . T h i s a v o i d s
e r r o r
m e s s a g e s
w h i c h
w i l l
c a u s e p r o b l e m s . O n c e y o u v e b e c o m e
m o r e
c o m f o r t a b l e w o r k i n g
y o u
c a n
c h a n g e
p r o g r a m s a r o u n d t o s u i t y o u r o w n n e e d s . B u t d o n t
c h a n g e a n y t h i n g u n t i l a f t e r p r o g r a m c o m p i l e s a n d l i n k s e x a c t l y a s
h e r e .
A s t e p b y s t e p p r o c e d u r e f o l l o w s .
y o u r e
o n W o r k b e n c h , y o u
m u s t s t r t C L I b e f o r e a n y t h i n g e l s e
T h e C L I
b e f o u n d
S y s t e m d r a w e r
l o c a t e d
o n W o r k b e n c h d i s k .
W o r k b e n c h
u s e r s
s h e l l
p r o g r a m
w h i c h e n h a n c e d v e r s i o n C L I .
W o r k b e n c h u s e r s
w h o
c a n t f i n d C L I m a y
h a v e s w i t c h e d
w i t h
s e t t i n g s P r e f e r e n c e s
1 . 2 . U s i n g
P r e f e r e n c e s 1 . 2 y o u m u s t
c l i c k o n O N g a d g e t n e x t
w o r d C L I .
O n c e y o u c l o s e
a n d
r e o p e n W o r k b e n c h
d i s k
i c o n C L I i c o n s h o u l d a p p e a r
w i n d o w .
A f t e r y o u
i n v o k e C L I s h e l l n e w w i n d o w a p p e a r s .
T h i s
w i n d o w p r o m p t s i n p u t w i t h m e s s a g e :
a s u p e r c o m p u t e r
s u c h
a s t h e
A m i g a t h i s
p r o g r a m s o m e t h i n g
u n u s u a l . N o
i c o n s
a p p e a r m o u s e
o n l y
u s e d
m o v e
s i z e
w i n d o w C L I o n l y a c c e p t s
i n p u t
f r o m k e y b o a r d .
m o u s e
e n l a r g e C L I
w i n d o w
m a x i m u m s i z e E v e r y t h i n g
o c c u r s f r o m n o w w i l l
d i s p l a y e d
C L I
w i n d o w . N o w
m o u s e a s i d e y o u w o n t b e n e e d i n g w h i l e .
1 7
7/25/2019 Amiga C for Beginners
26/308
7/25/2019 Amiga C for Beginners
27/308
A b a c u s
C o m p i l i n g
3 . 2
C o m p i l i n g
L a t t i c e
A z t e c C
S t a r t L a t t i c e c o m p i l e r w i t h t h e f o l l o w i n g :
l c L h e l l o
F o r L a t t i c e C 4 . 0 , f o l l o w i n g s h o u l d n o w a p p e a r
o n
s c r e e n . Y o u r
s c r e e n
m a y
d i f f e r s l i g h t l y
y o u e r r o r
m e s s a g e s ,
s e e S e c t i o n
1 > l c L h e l l o
L a t t i c e A m i g a D O S C C o m p i l e r V e r s i o n
C o p y r i g h t 1 9 8 7 S A S I n s t i t u t e
I n c .
r i g h t s r e s e r v e d
C o m p i l i n g
h e l l o . c
M o d u l e s i z e P = 0 0 0 0 0 0 1 4 D = 0 0 0 0 0 0 1 2 U = 0 0 0 0 0 0 0 0
T o t a l
f i l e s : C o m p i l e d
L i n k i n g h e l l o
B L i n k V e r s i o n 7 . 2
C o p y r i g h t 1 9 8 6 T h e S o f t w a r e D i s t i l l e r y .
C o p y r i g h t
1 9 8 7 S A S
I n s t i t u t e
I n c .
r i g h t s r e s e r v e d
B o x 8 0 0 0 S A S C i r c l e , C a r y 2 7 5 1 1 - 8 0 0 0 T e l e x 8 0 2 5 0 5 9 1 9 ) 4 6 7 - 8 0 0 0
B l i n k
c o m p l e t e
M a x i m u m c o d e s i z e 5 4 8 8 0 0 0 0 1 5 7 0 ) b y t e s
F i n a l o u t p u t f i l e s i z e = 5 3 1 2 0 0 0 0 1 4 c 0 ) b y t e s
T o
c o m p i l e
p r o g r a m u s i n g z t e C c o m p i l e r r e q u i r e s t w o s t e p s .
T h e A z t e c s y s t e m f i r s t
c o m p i l e s s o u r c e c o d e
t h e n
a s s e m b l e s
a n d
l i n k s A
m a k e f i l e b e q u i t e
u s e f u l .
E n t e r
f o l l o w i n g
A z t e c C c o m p i l e r :
l > c c L h e l l o
T h e a b o v e s e q u e n c e m a y f u n c t i o n
s o m e
c a s e s . n o t , e n t e r
s a m e
l i n e o m i t + L . z t e C
s h o u l d
d i s p l a y f o l l o w i n g o n
s c r e e n .
Y o u r s c r e e n m a y d i f f e r s l i g h t l y . I f y o u e r r o r m e s s a g e s ,
s e e S e c t i o n 3 . 3 .
1 > c c + L h e l l o
A z t e c C 6 8 K 3 . 6 a
1 2 - 1 8 - 8 7
1 9 8 2 - 1 9 8 7 b y
M a n x S o f t w a r e
S y s t e m s , I n c .
A z t e c 6 8 0 0 0 A s s e m b l e r 3 . 6 a
1 2 - 1 8 - 8 7
N o w e n t e r
l > l n h e l l o . o
l m
l c
1 9
7/25/2019 Amiga C for Beginners
28/308
T h e F i r s t P r o g r a m A m i g a C f o r B e g i n n e r s
A z t e c
C
s h o u l d d i s p l a y f o l l o w i n g
o n
s c r e e n .
Y o u r
s c r e e n m a y
d i f f e r
s l i g h t l y .
l > l n
h e l l o . o
A z t e c C 6 8 K L i n k e r
3 . 6 a 1 2 1 8 8 7
B a s e :
0 0 0 0 0 0
C o d e :
0 0 1 4 4 4
D a t a :
0 0 0 2 a 0 U d a t a : 0 0 0 0 5 0 T o t a l : 0 0 1 7 3 4
S u c c e s s D i d e v e r y t h i n g w o r k e x p e c t e d ? y o u d i d n t g e t a n e r r o r
t y p e
d i r c o m m a n d C L I t h e c u r r e n t d i s k s d i r e c t o r y . T T i e
c u t a b l e p r o g r a m
s t o r e d t h e r e
u n d e r
n a m e h e l l o . N o t i c e t h a t t h i s
f i l e n o e x t e n s i o n . T h e r e m a y a l s o b e o t h e r f i l e s w i t h e x t e n s i o n s
. m a p . l n k a n d o f c o u r s e T h i s
s h o w s
t h a t e x t e n s i o n h e l p s
i d e n t i f y t h e f i l e C a l l
e x e c u t a b l e
p r o g r a m b y e n t e r i n g t h e f o l l o w i n g
l i n e
h e l l o
O n s c r e e n a p p e a r s t e x t
H e l l o a m
h e r e
T h e p r o g r a m i s n t e a r t h - s h a t t e r i n g t h i s
b e g i n n i n g .
2 0
7/25/2019 Amiga C for Beginners
29/308
A b a c u s
3 3
E r r o r
M e s s a g e s
3 3
E r r o r M e s s a g e s
L a t t i c e
A z t e c
T h e m o s t c o m m o n m i s t a k e
a
n e w C p r o g r a m m e r m a k e s o m i t t i n g
s e m i c o l o n f o l l o w i n g t h e c l o s i n g p a r e n t h e s i s p r i n t f f u n c t i o n .
T h i s s e m i c o l o n o n e
m o s t
w i d e l y u s e d c h a r a c t e r s
C
p r o g r a m s s i n c e
i n d i c a t e s e n d
s t a t e m e n t . F o r t h i s
r e a s o n
a l m o s t e v e r y C s t a t e m e n t f u n c t i o n e n d s w i t h a s e m i c o l o n . u s e r
o m i t s c o m p i l e r r e p o r t s m a n y e r r o r m e s s a g e s . Y o u
m i g h t
l i k e
e d i t h e l l o c f i l e a g a i n
a n d r e m o v e
s e m i c o l o n . S a v e f i l e
c o m p i l i n g f i l e a g a i n .
y o u
f o r g o t
t y p e
s e m i c o l o n
f o l l o w i n g
p r i n t
f
f u n c t i o n ,
t h e L a t t i c e C c o m p i l e r d i s p l a y s t h e f o l l o w i n g m e s s a g e :
h e l l o c E r r o r s e m i c o l o n e x p e c t e d
C o m p i l e r r e t u r n c o d e
T h e A z t e c C c o m p i l e r d i s p l a y s t h e f o l l o w i n g
m e s s a g e
s e m i c o l o n
m i s s i n g :
h e l l o c : 5 E R R O R
m i s s i n g
s e m i c o l o n
e r r o r s
L e t s
d e t e r m i n e
f r o m
t h i s
c o m p i l e r
m e s s a g e w h a t
w r o n g
w i t h
f i l e . T h e f i r s t l i n e
s t a t e s
f i l e n a m e w h i c h t h e e r r o r a p p e a r e d :
h e l l o c
T h a t f i l e n a m e s p e c i f i c a t i o n
u s e f u l l a t e r
o n m o r e o n
t h i s
l a t e r . T h e n f o l l o w s l i n e n u m b e r e r r o r n u m b e r a n d e r r o r
d e s c r i p t i o n
E n g l i s h . T h i s i n d i c a t e s t h a t
a s e m i c o l o n
w a s e x p e c t e d
l i n e
T h e u s e r m u s t n o w r e l o a d e d i t o r t o c o r r e c t t h e e r r o r :
E D H E L L O C
Y o u m u s t
i n c l u d e e x t e n s i o n
t o e d i t
C
s o u r c e
c o d e .
T o r e a c h l i n e
y o u c o u n t
d o w n l i n e s f a s t e s t m e t h o d
p r o g r a m t h i s
s h o r t ) .
Y o u a l s o
p r e s s
< E s c x M > < 5 x R e t u r n >
t o l i n e T h e e d i t o r t h e n m o v e s c u r s o r l i n e i n d i c a t e d .
L i n e 5 c o n s i s t s
o n l y o f
c l o s i n g b r a c e t h i s
e x p e c t e d
s i n c e
t h e e r r o r
a c t u a l l y o c c u r r e d
p r e v i o u s l i n e . T h e s e m i c o l o n
p r e v i o u s l i n e m i s s i n g . T h e e r r o r m e s s a g e s o f
C
c o m p i l e r s h o u l d
n e v e r
b e
t a k e n l i t e r a l l y , s i n c e t h e s e a r c h
f o r t h e e r r o r m a y
h a v e
t a k e s u r r o u n d i n g c o d e l i n e s i n t o c o n s i d e r a t i o n .
2 1
7/25/2019 Amiga C for Beginners
30/308
T h e
F i r s t P r o g r a m m i g a
f o r B e g i n n e r s
A f t e r p l a c i n g s e m i c o l o n w h e r e b e l o n g s f o l l o w i n g
p r i n t f
f u n c t i o n ,
s a v e
f i l a g a i n
a n d
t r y t o
c o m p i l e
s o u r c e c o d e
a g a i n .
s h o u l d w o r k
7/25/2019 Amiga C for Beginners
31/308
T h e o r y a n d
P r a c t i c e
7/25/2019 Amiga C for Beginners
32/308
7/25/2019 Amiga C for Beginners
33/308
7/25/2019 Amiga C for Beginners
34/308
T h e o r y a n d P r a c t i c e A m i g a C f o r B e g i n n e r s
N o o t h e r s t a t e m e n t s f o l l o w l i n e a f t e r p r i n t f T h i s m e a n s t h a t
m a i n
f u n c t i o n
a l s o r e a c h e d e n d p r o g r a m e n d s T h e
c o m p u t e r
r e t u r n s t o
C L I
a d d i t i o n a l
c o m m a n d s e n t e r e d
T h e
p r o g r a m
t h e r e t u r n C L I
r e p r e s e n t t e r m i n a
t i o n m a i n
f u n c t i o n T h e
u s e r s h o u l d
n o t e
h o w
i m p o r t a n t t h i s
f u n c t i o n r e p r e s e n t s t h e C p r o g r a m
i t s e l f ;
p r o g r a m e x e c u t i o n s t a r t s
a n d
e n d s w i t h
m a i n
f u n c t i o n
7/25/2019 Amiga C for Beginners
35/308
A b a c u s P r o g r a m F o r m a t
4
. 1
P r o g r a m F o r m a t
L e t s d i s c u s s t h e
f o r m a t p r o g r a m .
T h e C
c o m p i l e r
i g n o r e s
s p a c e s , l i n e f e e d s a n d e n d o f p a r a g r a p h m a r k s a d d e d l i s t i n g b y
u s e r . I n d e n t i n g l i n e s
a d d i n g
b l a n k l i n e s h e l p s
m a k e s o u r c e c o d e s
m o r e r e a d a b l e
u s e r .
F o r m a t t i n g h a s n o e f f e c t o n e x e c u t i o n
s p e e d t h e l e n g t h f i n a l p r o g r a m . T h e p r o g r a m e n t e r e d
C h a p t e r c o u l d
h a v e b e e n f o l l o w i n g f o r m a t s :
v o i d
m a i n
p r i n t f ( H e l l o ,
a m h e r e ) ;
v o i d m a i n
p r i n t f ( H e l l o , a m h e r e ) /
v o i d
m a i n
( ) { p r i n t f ( H e l l o ,
h e r e ) ; }
u s e r
s e l e c t
v e r s i o n w h i c h a p p e a r s
m o s t
r e a d a b l e . O n c e y o u v e s e l e c t e d s t y l e , s t i c k w i t h H o w e v e r , l a s t
v e r s i o n a b o v e i l l u s t r a t e s h o w e v e n s m a l l
p r o g r a m
m a d e
u n r e a d a b l e b y f o r m a t t i n g
N o t e : A l l s t a t e m e n t s f u n c t i o n s m u s t e n t e r e d l o w e r c a s e
s i n c e
C
c a s e - s e n s i t i v e d i f f e r e n t i a t e s b e t w e e n u p p e r l o w e r c a s e l e t t e r s ) .
e n t e r e d P r i n t f p r i n t f i n s t e a d p r i n t f , l i n k e r
r e p o r t s
e r r o r s i n c e
c a n n o t
f i n d t h i s f u n c t i o n a n y w h e r e .
2 7
7/25/2019 Amiga C for Beginners
36/308
7/25/2019 Amiga C for Beginners
37/308
A b a c u s 4 3 p r i n t f a n d E s c a p e S e q u e n c e s
4 . 3
p r i n t f a n d E s c a p e
S e q u e n c e s
T h e t e x t a t S e c t i o n 4 . 2 a p p e a r s t h e s c r e e n a s a p p e a r s
s o u r c e c o d e ,
w i t h t h r e e
e x c e p t i o n s . T h e
t h r e e \ n
c h a r a c t e r s
d o
a p p e a r . T h e
\ n
c h a r a c t e r
c a l l e d t h e
n e w l i n e c h a r a c t e r ,
m a n y
e s c a p e
s e q u e n c e s
u s e d f o r c o n t r o l l i n g f o r m a t o f t e x t T h e \ n
c h a r a c t e r
t e l l s
c o m p i l e r t o i n s e r t l i n e f e e d t h a t p l a c e t e x t
j u s t y o u p r e s s e d < R e t u r n > k e y .
A n y e s c a p e s e q u e n c e r e c o g n i z e d b y
b a c k s l a s h
p r e c e d i n g
T h e c h a r a c t e r f o l l o w i n g
i n d i c a t e s w h i c h
e s c a p e s e q u e n c e
s h o u l d
e x e c u t e d .
F o r e x a m p l e ,
n
s i g n i f i e s
a
l i n e f e e d :
T h e
c o m p u t e r
s t a r t s
t e x t
a f t e r \ n
b e g i n n i n g
n e x t l i n e
T h i s n e w l i n e ( \ n ) e s c a p e
s e q u e n c e i m p o r t a n t , s i n c e
p r i n t f
f u n c t i o n d o e s n t a u t o m a t i c a l l y l i n e f e e d s a f t e r d i s p l a y s
t e x t Y o u l l
r e m e m b e r
t h a t
w h e n y o u
p r o g r a m C h a p t e r p r o m p t
a p p e a r e d r i g h t a f t e r t e x t B a s i c a l l y C w r i t e s c h a r a c t e r s s e q u e n t i a l
o n t h e s c r e e n , e v e n t h e y a r e w r i t t e n w i t h d i f f e r e n t f u n c t i o n c a l l s
T h e
u s e r
m u s t p r o g r a m
f u n c t i o n
a d v a n c e
l i n e
T h e u s e r o b l i g a t e d p l a c e e s c a p e
s e q u e n c e s
c h a r a c t e r s t r i n g T h e y b e p l a c e d b e t w e e n o t h e r n o r m a l
c h a r a c t e r s
e v e n
b e g i n n i n g o f
t e x t
d e s i r e d ,
t h r e e
l i n e s
w r i t t e n w i t h i n o n e p r i n t f
f u n c t i o n :
p r i n t f ( H e l l o , h a v e q u e s t i o n \ n D o b e l i e v e l i f e
w i t h o u t
e l e c t r i c i t y ? \ n N o t m e \ n ) ;
T h i s l i n e
r a t h e r
d i f f i c u l t r e a d . y o u c o n s i s t e n t l y
p l a c e n e w l i n e
( \ n )
c h a r a c t e r e n d s s t r i n g s , p r o g r a m s w i l l b e m u c h e a s i e r
r e a d .
T h e
n e w l i n e c h a r a c t e r o n l y m e t h o d
f o r m a t t i n g
t e x t . T h e
p r i n t f
c o m p a r a b l e P R I N T c o m m a n d B A S I C
w r i t e
s t a t e m e n t
P a s c a l .
T h e
f
p r i n t f
i n d i c a t e s t h a t t e x t
b e o u t p u t s p e c i f i e d f o r m a t T h i s f u n c t i o n c a n p r o c e s s
a n d
p l a y c h a r a c t e r
s t r i n g s o t h e r v a l u e s s p e c i f i e d
b y
p r o g r a m m e r .
S i n c e t h e s e c a p a b i l i t i e s q u i t e e x t e n s i v e , w e l l i n t r o d u c e t h e m
r e a d e r a s n e e d e d .
2 9
7/25/2019 Amiga C for Beginners
38/308
T h e o r y a n d P r a c t i c e A m i g a C f o r B e g i n n e r s
4 . 4
C o m m e n t s
T h e
C l a n g u a g e l e t s p r o g r a m m e r i n s e r t
c o m m e n t s
s o u r c e
c o d e . T h i s u s e d
t e l l r e a d e r w h a t
s o u r c e
c o d e
s u p p o s e d
C o m m e n t s h a v e n o e f f e c t o n s p e e d s i z e
c o m p i l e d p r o g r a m .
C o m m e n t s
s t a r t w i t h / * c h a r a c t e r s a n d e n d w i t h
c h a r a c t e r s . T h e c o m p i l e r s k i p s o v e r e v e r y t h i n g b e t w e e n
c o m m e n t d e l i m e t e r s . U s e c o m m e n t s
l i b e r a l l y , s i n c e
t h e y n e v e r a f f e c t
f i n a l
p r o g r a m a n d a d d
r e a d a b i l i t y s o u r c e
c o d e .
v o i d
m a i n O
T h i s p r o g r a m o u t p u t s t e x t w h i c h s t a r t s
p r i n t f ( C o m m e n t s d e s i r e d
s t o p
\ n
h e r e A a n d e n d s
o v e r
t h e o p p o s i t e
e n d *
N o w , t h i n k
y o u r f i r s t p r o g r a m f r o m C h a p t e r
y o u
a d d e d
c o m
n t s t e l l f u t u r e r e a d e r e x a c t l y w h a t t h i s p r o g r a m a n d w h e n ,
r e s u l t c o u l d l o o k s o m e t h i n g l i k e
t h i s :
P r o g r a m f r o m C h a p t e r S c h a u n ' s b o o k
A m i g a
B e g i n n e r s
f r o m A b a c u s 1 9 8 8
T h i s p r o g r a m p r i n t s
t h e w o r d s H e l l o ,
h e r e
t h e
s c r e e n .
N o t h i n g e l s e .
# i n c l u d e
< s t d i o . h > c a l l s t a n d a r d
h e a d e r
f i l e
v o i d
m a i n ( ) m a i n f u n c t i o n
s t a r t
f u n c t i o n
p r i n t f ( H e l l o , a m h e r e ) / s h o w
t e x t s c r e e n
e n d f u n c t i o n
T h i s
a v e r y e x a g g e r a t e d e x a m p l e .
d o e s n t
m a t t e r y o u
c o m m e n t
p r o g r a m
t h i s c l e a r l y ,
t h o u g h t h e
c o m m e n t s
i g n o r e d
b y c o m
p i l e r .
3 0
7/25/2019 Amiga C for Beginners
39/308
A b a c u s
V a r i a b l e s A r i t h m e t i c
4 . 5
V a r i a b l e s a n d
A r i t h m e t i c
s n f
V a r i a b l e t y p e s
O u r k n o w l e d g e
C
l a n g u a g e s t i l l r a t h e r s m a l l . R i g h t n o w y o u
d i s p l a y t e x t o n s c r e e n a n d i n s e r t c o m m e n t s s o u r c e c o d e .
w o u l d n i c e a b l e
h a v e
p r o g r a m a c c e p t
i n p u t
f r o m
k e y b o a r d .
T h e s c a n f
f u n c t i o n o p p o s i t e
p r i n t
f
f u n c t i o n i t r e a d s
i n p u t
i n s t e a d
d i s p l a y i n g
o u t p u t m o r a b o u t
s c a n f l a t e r
C o n s i d e r h o w p r o g r a m w o u l d e x e c u t e q u e s t i o n s a n d a n s w e r s . F i r s t
p r i n t
f u n c t i o n d i s p l a y s q u e s t i o n
o n
t h e s c r e e n .
N e x t
s c a n f
f u n c t i o n
r e a d s
u s e r s
i n p u t .
e x a m p l e , p r e t e n d
t h a t
n u m b e r
w i l l b e
i n p u t a s r e s p o n s e . T h e
f o l l o w i n g
q u e s t i o n a s k s a n u m b e r
A r e y o u
w e l l ?
= Y E S ,
N u m b e r :
T h e n u m b e r m u s t
s t o r e d
s o m e w h e r e . C p r o v i d e s
s e r i e s v a r i a b l e
t y p e s w h i c h b e
u s e d .
V a r i a b l e s
a l l o w c e r t a i n t y p e s
i n f o r m a t i o n
b e
s t o r e d
c o m p u t e r .
T h e
v a r i a b l e
t y p e d e p e n d s
o n t y p e
i n f o r m a t i o n y o u
w a n t
s t o r e d .
T h e r e
v a r i a b l e s f o r c h a r a c t e r s ; v a r i a b l e s f o r
s t r i n g s ;
v a r i a b l e s f o r
d i f f e r e n t k i n d s s i z e s o f n u m b e r s ; v a r i a b l e s f o r c o m b i n a t i o n s o f
n u m b e r s .
4 . 5 . 1
I n t e g e r s
T h e i n t v a r i a b l e t y p e r e p r e s e n t s
i n t e g e r
w h o l e ) n u m b e r s . V a r i a b l e s
t y p e i n t a c c e p t w h o l e n u m b e r s f r o m a p p r o x i m a t e l y ) - 3 2 , 7 6 8
+ 3 2 , 7 6 7 . T h e f o l l o w i n g p r o g r a m u s e s i n t e g e r v a r i a b l e s , a n d i n t r o d u c e s
p r a c t i c a l
a p p l i c a t i o n
s c a n f f u n c t i o n :
s c a n l . c s e c t i o n
v o i d m a i n )
i n t i n p u t ;
p r i n t f A r e
w e l l ? \ n ) ;
p r i n t f D
= Y E S ,
N O \ n \ n ) ;
3 1
7/25/2019 Amiga C for Beginners
40/308
T h e o r y a n d P r a c t i c e A m i g a C
B e g i n n e r s
p r i n t f ( N u m b e r :
s c a n f ( d ,
& i n p u t ) ;
p r i n t f ( \ n \ n Y o u r i n p u t
w a s :
d \ n , i n p u t ) ;
T h e
f i r s t
l i n e
m a i n
f u n c t i o n , i n t
i n p u t ; , t e l l s
c o m p i l e r
w h a t
d o
w i t h
v a r i a b l e s . T h i s l i n e a s s i g n s n a m e v a r i a b l e .
T h e p r o g r a m
u s e s
t h i s v a r i a b l e n a m e a c c e s s v a r i a b l e ' s
c o n t e n t s . T h i s v a r i a b l e n a m e ( i n p u t )
i n d i c a t e s
p u r p o s e . V a r i a b l e
d e f i n i t i o n
e n d s w i t h s e m i c o l o n .
F o r m a t T h e
f o l l o w i n g
l i n e s
p r i n t f
f u n c t i o n s . N e x t ,
s c a n f
s p e c i f i c a t i o n f u n c t i o n
a s k s f o r t h e
u s e r ' s i n p u t r e s p o n s e
t e x t N u m b e r :
S i n c e a l a r g e n u m b e r d a t a t y p e s e x i s t s , i n p u t
r o u t i n e
m u s t
b e
t o l d w h a t d a t a c a n
b e
e x p e c t e d . T h e f o r m a t s p e c i f i c a t i o n d s p e c i f i e s
d a t a t y p e . F o r m a t s p e c i f i c a t i o n s a r e s i m i l a r t o t h e e s c a p e s e q u e n c e s
( t h e
c h a r a c t e r s
p r e c e d e d
b y b a c k s l a s h ) . T h e p e r c e n t
s i g n
i n d i c a t e s
f o r m a t s p e c i f i c a t i o n ; d
t e l l s
s c a n f t h a t v a l u e b e r e a d
m u s t
b e
t y p e
i n t . T h e n a m e
d e s i r e d v a r i a b l e
f o l l o w s
s t r i n g q u o t e s , s e p a r a t e d f r o m s t r i n g
b y c o m m a .
A n a m p e r s a n d
p r e c e d e s
t h e v a r i a b l e n a m e . T h i s i m p o r t a n t : s y s t e m
c r a s h e s
u s e r s h o u l d f i r s t e x a m i n e
s c a n f
f u n c t i o n p a r a m e t e r s m a k e
s u r e
t h e y a r e c o r r e c t .
s c a n f c o n t a i n s t h e c o r r e c t i n f o r m a t i o n , u s e r e n t e r t h e i n p u t
r u n n i n g
p r o g r a m . E n t e r
n u m b e r a n d
p r e s s t h e < R e t u r n >
k e y .
T h i s v a l u e b e f o u n d t h e v a r i a b l e i n p u t . T h e p r o g r a m n o w
t h i s
n u m b e r .
T h i s p r o g r a m a c c e p t s t h e i n p u t
t h e n
d i s p l a y s t h e v a r i a b l e u s i n g
p r i n t f
f u n c t i o n . T h e
p r i n t f
f u n c t i o n
m u s t a l s o
b e t o l d
w h a t
k i n d
d a t a
m u s t p r o c e s s .
A
f o r m a t
s p e c i f i c a t i o n
i d e n t i c a l
o n e
w h i c h a p p e a r s s c a n f s e r v e s t h i s
p u r p o s e .
B e c a u s e
t h i s
p r i n t f
k n o w s t h a t i n t e g e r n u m b e r
w i l l
p a s s e d , w h i c h m u s t b e p l a c e d
t h e l o c a t i o n o c c u p i e d b y f o r m a t s p e c i f i c a t i o n t e x t . T h e
v a r i a b l e n a m e i n p u t f o l l o w s
s t r i n g
q u o t e s , s e p a r a t e d f r o m
s t r i n g
b y
c o m m a .
T h e
i n p u t a p p e a r s
o n s c r e e n i n p u t
w a s
2
a n d t e x t
( t e x t a l l o w e d
h e r e ) .
y o u e n t e r t e x t
i n p u t
b e c o m e s
l a r g e
r a n d o m
n u m b e r L a t t i c e e v e n
t h o u g h
t h i s n u m b e r
n e v e r
a p p e a r e d
i n p u t l i n e . I f y o u e n t e r
n o
i n p u t s c a n f s c r o l l s
s c r e e n o n e l i n e u p w a r d a n d w a i t s n e w m o r u s e f u l ) i n p u t .
4 . 5 . 2
T h e i f s t a t e m e n t
r a t h e r b o r i n g
j u s t c o m p u t e r
r e p e a t i n p u t .
w o u l d b e
b e t t e r r e s p o n d
i n p u t .
e x a m p l e ,
h a v e c o m p u t e r r e s p o n d
e n t r y
w i t h
m e s s a g e ,
' T h a t v e r y
g o o d , o r
e n t r y
w h e r e m e s s a g e
c o u l d
a m
s o r r y
h e a r
t h a t
T h e
3 2
7/25/2019 Amiga C for Beginners
41/308
A b a c u s V a r i a b l e s a n d A r i t h m e t i c
c o m p u t e r m u s t b e c a p a b l e o f c o m p a r i n g v a l u e s t o r e d
i n p u t
w i t h o t h e r n u m b e r s . D e p e n d i n g
o n
r e s u l t s t h i s t e s t m u s t
s e l e c t o n e
t e x t
o t h e r
t e x t p r o g r a m m i n g
t h i s
k n o w n
i f . . . t h e n c o n s t r u c t . A s m a n y o t h e r l a n g u a g e s , C a l s o t h i s
c a p a b i l i t y
( C
d o e s n ' t
r e q u i r e t h e
t h e n ) .
T h e
v a r i a b l e c o m p a r e d
w i t h c o n d i t i o n
f o u n d b e t r u e ,
s t a t e m e n t f o l l o w i n g
i f
c o m m a n d e x e c u t e s . H e r e
a n
e x a m p l e :
i f ( i n p u t
= =
p r i n t f ( T h a t v e r y
g o o d \ n ) ;
i f ( i n p u t = =
p r i n t f ( I a m s o r r y t o h e a r t h a t \ n ) /
T h e c o n d i t i o n s a p p e a r i n s i d e t h e p a r e n t h e s e s t h a t f i r s t p r i n t f
s t a t e m e n t o n l y
o c c u r s
w h e n
i n p u t
e q u a l s T h e s a m e t r u e o f
f o l l o w i n g s t a t e m e n t , w i t h d i f f e r e n c e t h a t
t e x t
e x e c u t e s
i n p u t e q u a l s
S e m i c o l o n s
n e v e r f o l l o w
T h e u s e r w h o
w a n t s
e x p e r i m e n t c a n s e m i c o l o n
a f t e r s e c o n d
i f .
y o u
d o p r o g r a m
a c t s l i n e i f ( i n p u t
= = 2 ) ;
d o e s n ' t
e x i s t A f t e r
e a c h
i n p u t a m s o r r y
h e a r
t h a t
a p p e a r s .
A d d i n g f o u r l i n e s a b o v e m a k e s p r o g r a m p r o p e r l y ,
c o u l d b e
i m p r o v e d .
S o m e u s e r s m a y
b e
f a m i l i a r w i t h
B A S I C
s t a t e m e n t :
A = l T H E N P R I N T T h a t
v e r y
g o o d :
E L S E P R I N T a m s o r r y
t o
h e a r t h a t
e l s e T h e
C
l a n g u a g e a l s o e l s e s t a t e m e n t w h i c h c a n o n l y b e u s e d
t o g e t h e r w i t h i f s t a t e m e n t . T h e e l s e s t a t e m e n t e x e c u t e s o n l y
w h e n c o n d i t i o n
b e e n
m e t . T h i s e l i m i n a t e s t h e
s e c o n d
t e s t
i f ( i n p u t
p r i n t f ( T h a t
v e r y
g o o d \ n ) ;
e l s e
p r i n t f ( I a m s o r r y t o h e a r t h a t \ n ) ;
T h e s e c o n d t e s t n o w i m p r o v e d . A m o d i f i e d v e r s i o n C p r o g r a m
n o w
a p p e a r s
a s f o l l o w s :
s c a n 2 . c 4 . 5 . 2
v o i d m a i n ( )
i n p u t ;
p r i n t f ( A r e w e l l ? \ n )
p r i n t f ( ( 1 ) = Y E S , N O \ n \ n ) ;
p r i n t f ( I n p u t N u m b e r :
s c a n f ( % d , & i n p u t ) /
i f ( i n p u t
p r i n t f ( T h a t v e r y g o o d \ n ) ;
e l s e
3 3
7/25/2019 Amiga C for Beginners
42/308
T h e o r y a n d P r a c t i c e A m i g a C
B e g i n n e r s
p r i n t f
s o r r y t o
h e a r
t h a t \ n ) ;
s e v e r a l c o m m a n d s
s h o u l d b e e x e c u t e d a f t e r i f e . g . , t w o
p r i n t f
f u n c t i o n s ) , s e c o n d
l i n e c a n n o t b e w r i t t e n i m m e d i a t e l y
a f t e r
T h e f o l l o w i n g e x a m p l e w o u l d n t w o r k :
i f ( i n p u t
p r i n t f ( T h a t
v e r y
g o o d \ n ) ;
p r i n t f ( H o p e
s t a y h e a l t h y \ n ) ; / * N o t
l i k e t h i s
e l s e
p r i n t f ( I
a m s o r r y h e a r t h a t \ n ) ;
S t a t e m e n t S i n c e o n l y l i n e e x e c u t e d a f t e r s o m e t h i n g e l s e m u s t
b l o c k d o n e .
U p
n o w o n l y o n e
s t a t e m e n t
b e e n
d e s c r i b e d .
t i m e
d e s c r i b e s t a t e m e n t b l o c k . P l a c i n g
s e v e r a l
s t a t e m e n t s i n s i d e b r a c e s
c r e a t e s
s t a t e m e n t
b l o c k
w h i c h
v a l i d u n i t . T h i s
b l o c k
b e
p l a c e d f o l l o w i n g i f
s t a t e m e n t
w i t h o u t
p r o b l e m s :
i f ( i n p u t = =
p r i n t f ( T h a t
v e r y g o o d \ n ) / R i g h t
p r i n t f ( H o p e
y o u s t a y h e a l t h y \ n ) ;
e l s e
p r i n t f ( I a m s o r r y t o h e a r t h a t \ n ) ;
T h e
A m i g a d o
t h i n g s , w h a t
d o e s b e s t c a l c u l a t e
f a s t ) . L e t s s t a r t w i t h a d d i t i o n . T o a d d t w o
v a l u e s
p l u s s i g n
s u m =
n u m b e r l
n u m b e r 2 ;
T h e r e s u l t t h i s e x a m p l e s t o r e d v a r i a b l e s u m . T h i s v a r i a b l e
m u s t d e f i n e d b e g i n n i n g o f t h e f u n c t i o n , j u s t l i k e v a r i a b l e s .
U s i n g
t y p e
i n t , f o l l o w i n g d e f i n i t i o n r e s u l t s :
n u m b e r l
n u m b e r 2
C a l a n g u a g e l a z y p e o p l e . M o s t e v e r y t h i n g b e c h a n g e d
a b b r e v i a t i o n s
d o w n
k e y b o a r d
u s e .
T h o s e
w h o
w a n t
b e c o m e
g o o d C p r o g r a m m e r s s h o u l d u s e t h i s c a p a b i l i t y . T h e s e t h r e e v a r i a b l e s
d e f i n e d a s s a m e d a t a t y p e . Y o u o n l y n e e d e n t e r i n t o n c e ;
i n t e g e r v a r i a b l e s l i s t e d f o l l o w i n g t h e s i n g l e
i n t :
i n t s u m , n u m b e r l , n u m b e r 2 ;
A l l v a r i a b l e s a r e
s e p a r a t e d
b y c o m m a s l i s t t e r m i n a t e d
w i t h
s e m i c o l o n .
W i t h t h i s
i n f o r m a t i o n
p o s s i b l e
w r i t e
p r o g r a m t h a t a d d s
t w o
n u m b e r s . T h e s c a n f f u n c t i o n
p e r m i t s d a t a i n p u t , t h i s t i m e
3 4
7/25/2019 Amiga C for Beginners
43/308
A b a c u s
V a r i a b l e s
a n d A r i t h m e t i c
n u m b e r s w i l l r e a d
T h i s
w i l l
d o n e w i t h
t w o s e p a r a t e
f u n c
t i o n
c a l l s
t h i s
w o u l d a l s o p o s s i b l e ,
a s e c o n d
f o r m a t
s p e c i f i c a
t i o n w r i t t e n
i n t o
s t r i n g
s c a n f c a l l . c o n t a i n s % d % d
n o t i c e
n o s p a c e s w h i c h
r e a d s s e c o n d p a r a m e t e r . A n d n o w
l i s t i n g :
s c a n 3 . c 4 . 5 . 2
v o i d m a i n
i n t s u m ,
n u m b e r 1 ,
n u m b e r 2 ;
p r i n t f ( P l e a s e
i n p u t
t w o
n u m b e r s \ n ) ;
s c a n f ( % d % d ,
& n u m b e r l , & n u m b e r 2 ) ;
s u m n u m b e r 1 n u m b e r 2 ;
p r i n t f ( % d % d % d \ n , n u m b e r l , n u m b e r 2 , s u m ) ;
T h e u s e r f a m i l i a r w i t h o t h e r l a n g u a g e s s u c h
B A S I C c o m p a r e
l i s t i n g s o t h e r
l a n g u a g e
i m p l e m e n t a t i o n s s a m e
p r o g r a m .
T h e
l a s t
p r i n t f
f u n c t i o n w i t h t h r e e
f o r m a t
s p e c i f i c a t i o n s a p p e a r
c o n f u s i n g . T h e f o l l o w i n g B A S I C
e q u i v a l e n t :
P R I N T
P l e a s e i n p u t
t w o n u m b e r s
I N P U T N 1 , N 2
S U M
P R I N T N l ; + ; N 2 ; = ; S U M
4 . 5 . 3 C a l c u l a t i n g w i t h C
T h e
r e a d e r g u e s s w t w o u l d h a v e b e c h a n g e d p e r f o r m m u l t i
p l i c a t i o n
i n s t e a d a d d i t i o n . T h e
p l u s
s i g n r e p l a c e d b y a s t e r i s k
A
h y p h e n
u s e d s u b t r a c t i o n a n d s l a s h p e r f o r m s
d i v i s i o n .
C a l c u l a t i o n s m a y b e p e r f o r m e d w i t h c o n s t a n t v a l u e s w e l l
v a r i a b l e s . B o t h c o n s t a n t s a n d v a r i a b l e s m i x e d . S o m e e x a m p l e s
f o l l o w i l l u s t r a t e . a s s u m e d
t h a t v a r i a b l e s
d e f i n e d
a n d
c o n t a i n m e a n i n g f u l v a l u e s :
r e s u l t
n u m b e r
s u m v a r v a r 2 v a r 4 ;
r e s u l t
= 4 5 - 7 /
v a r ;
v a l u e ( n u m b e r
r e s u l t
= 4 5 3 - 2 ;
c o u n t e r c o u n t e r
E v a l u a t i n g
f o r m u l a
s i m p l e
a s e n t e r i n g i n t o p o c k e t c a l c u l a
t o r . C
r e c o g n i z e s l a w s m a t h e m a t i c a l p r e c e d e n c e :
3 5
7/25/2019 Amiga C for Beginners
44/308
T h e o r y a n d P r a c t i c e A m i g a
C
f o r B e g i n n e r s
r e s u l t
= 4 5 3 - 2 ;
T h e
r e s u l t T h e
p r o d u c t
c a l c u l a t e d
f i r s t a f t e r
w h i c h 4 a d d e d a n d 2 s u b t r a c t e d .
T h e c o u n t e r
=
c o u n t e r + e x a m p l e
a b o v e d e s e r v e s
s p e c i a l
a t t e n t i o n . T h i s
e q u a t i o n
u n s o l v a b l e n o r m a l p e r s o n , n o
p r o b l e m f o r t h e c o m p u t e r . t a k e s t h e c o n t e n t o f t h e v a r i a b l e
c o u n t e r ,
a d d s
o n e
a n d s t o r e s
r e s u l t i n
c o u n t e r .
T h i s
o p e r
a t i o n i n c r e m e n t s
c o n t e n t t h e v a r i a b l e
b y
o n e e v e r y c a l l
L e t s
w r i t e
a c o m p r e h e n s i v e
p r o g r a m
p e r f o r m i n g m a t h e q u a t i o n s .
T h e a s s u m p t i o n s t h a t b a s i c
f o u r m a t h e m a t i c a l
f u n c t i o n s a r e
f o r m e d w i t h t w o v a r i a b l e s . A s c a n f
f u n c t i o n
r e a d s n u m b e r s . T h e n
n u m b e r s a r e t e s t e d w i t h s e v e r a l i f s t a t e m e n t s d e t e r m i n e w h i c h
m a t h e m a t i c a l f u n c t i o n s h o u l d b e p e r f o r m e d . T h e
r e s u l t
c a l c u l a t e d
a c c o r d i n g l y . i n v a l i d
c o d e
i n p u t ,
m e s s a g e
a p p e a r s .
H e r e
f i n i s h e d
v e r s i o n o f s u c h a p r o g r a m :
m a t h l . c
4 . 5 . 3
v o i d m a i n ( )
n u m b e r l , n u m b e r 2 ,
r e s u l t ,
o p e r a t o r ,
e r r o r ;
p r i n t f ( P l e a s e
i n p u t
t w o n u m b e r s \ n ) ;
s c a n f
( % d % d 1 1 , S n u m b e r l ,
& n u m b e r 2 ) ;
p r i n t f ( A n d
c o d e
o p e r a t i o n \ n ) ;
p r i n t f ( l = A d d , 2 = S u b t r a c t , 3 = M u l t i p l y , 4 = D i v i d e \ n ) ;
s c a n f ( d , ^ o p e r a t o r ) ;
e r r o r
i f ( o p e r a t o r A d d i t i o n
r e s u l t n u m b e r l n u m b e r 2 ;
e r r o r
i f ( o p e r a t o r S u b t r a c t i o n
r e s u l t n u m b e r l n u m b e r 2 ;
e r r o r
i f ( o p e r a t o r M u l t i p l i c a t i o n
r e s u l t n u m b e r l n u m b e r 2 ;
e r r o r
i f ( o p e r a t o r
D i v i s i o n
r e s u l t n u m b e r l n u m b e r 2 ;
e r r o r
i f ( e r r o r N o n e t h e a b o v e c o n d i t i o n s
p r i n t f ( W r o n g C o d e I n p u t o n l y n u m b e r s
4 \ n ) /
e l s e
3 6
7/25/2019 Amiga C for Beginners
45/308
A b a c u s
V a r i a b l e s
a n d
A r i t h m e t i c
p r i n t f T h e r e s u l t d \ n ,
r e s u l t ) ;
h e p r o g r a m v e r y
e a s y
t o r e a d .
A f t e r v a l u e s h a v e
b e e n
e n t e r e d ,
v a r i a b l e
e r r o r
a s s i g n e d v a l u e
D u r i n g
e v e r y
o p e r a t i o n
t h a t
f o l l o w s ,
a d d i t i o n ,
s u b t r a c t i o n ,
e t c . ,
e r r o r v a r i a b l e
z e r o .
T h i s m a k e s
p o s s i b l e
d e t e r m i n e w h e t h e r f o u r
o p e r a t i o n s
w a s
p e r f o r m e d .
I f t h i s w a s t r u e , v a l u e
o p e r a t o r
i l l e g a l .
B e f o r e
o u t p u t ,
r e s u l t t e s t e d d e t e r m i n e
w a s
c a l c u l a t e d .
T h i s
b e
s e e n
t h e v a r i a b l e
e r r o r .
T e s t t h i s p r o g r a m t h o r o u g h l y w i t h v a r i o u s v a l u e s .
P l e a s e n o t e t h a t
i n t e g e r v a r i a b l e s a r e o n l y p e r m i t t e d t o s t o r e v a l u e s
b e t w e e n
+ 3 2 , 7 6 7
- 3 2 , 7 6 8 . F u r t h e r m o r e ,
d i v i s i o n
s h o u l d
a v o i d e d .
T h i s w o u l d
c a u s e a s y s t e m
c r a s h
a n d
a
G u r u
M e d i t a t i o n .
4 . 5 . 4
F l o a t i n g
P o i n t
N u m b e r s
l o t
P e r h a p s
y o u h a v e n o t i c e d
s o m e t h i n g
e l s e .
d i v i d i n g
b y
T h e
r e s u l t
d i s p l a y e d b y c o m p u t e r
w h i c h i n c o r r e c t
w o u l d
r i g h t ) .
I s n t
t h i s
e x p e n s i v e
c o m p u t e r c a p a b l e o f p e r f o r m i n g c o r r e c t d i v i
s i o n ?
T h e
e r r o r
t r a c e d t h e v a r i a b l e t y p e . T h e i n t v a r i a b l e t y p e
o n l y c a p a b l e p r o c e s s i n g w h o l e
n u m b e r s
b e t w e e n 3 2 , 0 0 0 .
T h e
v a l u e
f l o a t i n g
p o i n t
n u m b e r ,
w h o l e
n u m b e r . d u r i n g
d i v i s i o n r e m a i n d e r t h e f r a c t i o n a f t e r d e c i m a l
p o i n t )
o c c u r s ,
i g n o r e d . T h i s d o e s m e a n t h a t
d i v i s i o n
c a n n o t p e r f o r m e d
A m i g a
c o m p u t e r .
T h e o n l y t h i n g r e q u i r e d t h a t t h e v a r i a b l e
t y p e c a p a b l e o f s t o r i n g f l o a t i n g p o i n t n u m b e r s . N o p r o b l e m
s i n c e C e q u i p p e d
t h i s .
T o
c o n v e r t
t h e c u r r e n t p r o g r a m t h i s n e w d a t a t y p e , t h e v a r i a b l e s
n u m b e r n u m b e r 2 a n d r e s u l t m u s t c h a n g e d . T h i s
p r o c e s s
c o n s i s t s o n l y o f
r e p l a c i n g i n t w i t h f l o a t .
T h e f i r s t l i n e s
a p p e a r
f o l l o w s :
m a i n
f l o a t n u m b e r 1 , n u m b e r 2 , r e s u l t ;
i n t o p e r a t o r , e r r o r ;
T h i s a l o n e s u f f i c i e n t s i n c e s c a n f p r i n t f f o r m a t
s p e c i f i c a t i o n d w h i c h e x p e c t s i n t e g e r v a l u e . T h i s n o l o n g e r
c a s e . T h e d m u s t r e p l a c e d w i t h a T h e m e n s f l o a t i n g p o i n t
3 7
7/25/2019 Amiga C for Beginners
46/308
7/25/2019 Amiga C for Beginners
47/308
7/25/2019 Amiga C for Beginners
48/308
T h e o r y a n d P r a c t i c e A m i g a C B e g i n n e r s
A f t e r
s m a l l
c h a n g e s ,
c o m p a r e t h i s v e r s i o n
f i n a l p r o g r a m
b e l o w
w h i c h s o m e
o t h e r
c o s m e t i c
c h a n g e s
w e r e
m a d e .
T h e r e a d e r
s h o u l d
n o w b e
a b l e
u n d e r s t a n d t h e a d d i t i o n s m d e
D u r i n g
t h e i n p u t
s m a l l i t e m h a s c h a n g e d .
U n t i l
n o w
< R e t u r n >
k e y
h a d
b e p r e s s e d ( b u t r e q u i r e d )
a f t e r
i n p u t t i n g e a c h n u m b e r .
N o w e n t i r e i n p u t m u s t o n e
l i n e
T h e r e a s o n t h i s f a c t
t h a t
s i n g l e
c h a r a c t e r r e a d
w i t h c . T h i s c o u l d
< R e t u r n >
s p a c e .
F o r
t h i s
r e a s o n f i r s t
n u m b e r f o l l o w e d
i m m e d i a t e l y
b y
o p e r a t o r
a f t e r w h i c h
< R e t u r n > k e y m a y b e p r e s s e d , d e s i r e d .
F i n a l l y
s e c o n d n u m b e r a p p e a r s t h i s l i n e :
1 5 . 5 0 0 0 0 0 1 2 . 5 0 0 0 0 0 1 9 3 . 7 5 0 0 0 0
H e r e f i n a l v e r s i o n t h i s p r o g r a m :
m a t h 3 . c
4 . 5 . 5 * /
v o i d m a i n ( )
f l o a t n u m b e r 1 , n u m b e r 2 , r e s u l t ;
c h a r o p e r a t o r ;
e r r o r ;
p r i n t f ( I n p u t F o r m a t : N u m b e r ,
O p e r a t o r , N u m b e r
s p a c e s ) \ n ) ;
s c a n f ( % f % c % f , & n u m b e r l , S o p e r a t o r , & n u m b e r 2 ) ;
e r r o r
i f ( o p e r a t o r A d d i t i o n
r e s u l t
n u m b e r l
n u m b e r 2 ;
e r r o r =
i f ( o p e r a t o r - ) S u b t r a c t i o n
r e s u l t n u m b e r l n u m b e r 2 ;
e r r o r
i f ( o p e r a t o r
M u l t i p l i c a t i o n
r e s u l t
n u m b e r l
n u m b e r 2 ;
e r r o r
i f ( o p e r a t o r D i v i s i o n
r e s u l t
n u m b e r l
n u m b e r 2 ;
e r r o r
=
i f ( e r r o r
N o n e t h e c o n d i t i o n s a b o v e
s a t i s f i e d ?
p r i n t f ( W r o n g O p e r a t o r % c \ n , o p e r a t o r ) ;
e l s e
p r i n t f ( % f % f \ n ,
n u m b e r l , o p e r a t o r ,
n u m b e r 2 ,
r e s u l t ) ;
4 0
7/25/2019 Amiga C for Beginners
49/308
b a c u s V a r i a b l e s a n d r i t h m e t i c
L a t t i c e T h e l i b r a r y m a t h e m a t i c a l f u n c t i o n s f l o a t i n g p o i n t n u m b e r s m u s t
b e l i n k e d s t a n d a r d
l i b r a r y E x a m p l e :
l c L m m a t h 3
z t e c
y o u w o r k w i t h
A z t e c C
c o m p i l e r
l i b r a r y m a t h e m a t i c a l
f u n c t i o n s
f l o a t i n g
p o i n t
n u m b e r s m u s t b e
l i n k e d w i t h
s t a n d a r d
l i b r a r y c l i b F o r e x a m p l e :
c c
L
m a t h 3 . c
m a t h 3 . o
l m l c
4 1
7/25/2019 Amiga C for Beginners
50/308
7/25/2019 Amiga C for Beginners
51/308
p s
7/25/2019 Amiga C for Beginners
52/308
7/25/2019 Amiga C for Beginners
53/308
A b a c u s L o o p s
5
L o o p s
T h e p r o g r a m s p r e s e n t e d
u n t i l
n o w
e x e c u t e
s t r a i g h t f r o m b e g i n n i n g
e n d .
A n i f
s t a t e m e n t m a y s k i p
o v e r
s o m e
s p o t s ,
w e h a v e n t
j u m p e d
e a r l i e r
s t a t e m e n t s .
L o o p s
b r a n c h
e a r l i e r
s e c t i o n s
p r o g r a m .
5 . 1 w h i l e L o o p s
T h e
w h i l e
s t a t e m e n t
f o l l o w e d b y p a r e n t h e s e s w h i c h s u r r o u n d
d e s i r e d a r g u m e n t s . A n x m p l m a k e s t h i s c l e a r :
v o i d
m a i n ( )
i n t c o u n t e r ;
c o u n t e r = 1 5 ;
w h i l e ( c o u n t e r
p r i n t f ( C o u n t e r
d \ n ,
c o u n t e r ) ;
c o u n t e r = c o u n t e r
T h e
b l o c k w h i c h a p p e a r s a f t e r w h i l e s t a t e m e n t e x e c u t e s u n t i l
c o n d i t i o n s i n s i d e t h e p a r e n t h e s e s a r e
t r u e .
I n t h e b e g i n n i n g , t h e v a r i a b l e
c o u n t e r s e t t o 1 5 . W h i l e c o n d i t i o n c o u n t e r > b e e n
m e t , f o l l o w i n g b l o c k e x e c u t e d
w h i c h
o u t p u t s t h e c u r r e n t v a l u e
c o u n t e r a n d
t h e n
d e c r e m e n t s b y o n e . t h i s c a s e p r i n t f
f u n c t i o n c a l l e d
t i m e s
u n t i l c o u n t e r
b e e n
r e d u c e d T h e
c o n d i t i o n a l s t a t e m e n t s b e f o r m e d b y
u s i n g
t e s t s
e q u a l i t y
= = ) ,
g r e a t e r
t h a n
> , l e s s
t h a n
g r e a t e r
t h a n
o r e q u a l
> = ) ,
l e s s
t h a n
e q u a l
< = ) . T h e
c o m p a r i s o n h e r e
c o u n t e r
g r e a t e r t h a n
T h e
c o m p a r i s o n
o p e r a t o r s
C a r e s i m i l a r t h o s e f o u n d m o s t
p r o g r a m m i n g l a n g u a g e s .
4 5
7/25/2019 Amiga C for Beginners
54/308
L o
o
A m i g a C f o r B e g i n n e r s
g r e a t e r t h a n
> =
g r e a t e r t h a n
e q u a l
= =
e q u a l
u n e q u a l
I n s t e a d
w h i l e ( c o u n t e r
f o l l o w i n g c o u l d b e w r i t t e n :
w h i l e ( c o u n t e r
T h e l a t t e r p r e f e r r e d s i n c e t h e l i m i t e x p l i c i t l y p r o v i d e d . T o c o n s t r u c t
a l o o p
w h i c h
c o u n t s v a l u e
1 0 0 ,
r e c o m m e n d e d
t h i s
n u m b e r
t e s t
w h i l e ( c o u n t e r
1 0 0 )
I n t h e c o m p a r i s o n
o p e r a t o r s
< =
e q u a l s i g n
a l w a y s
a p p e a r s t h e e n d .
F a c t o r i a l s A
p r a c t i c a l e x a m p l e t h e c a l c u l a t i o n
f a c t o r i a l
n u m b e r t h r o u g h
c o n s t a n t m u l t i p l i c a t i o n . A f a c t o r i a l i n m a t h e m a t i c s p r o d u c t
w h o l e n u m b e r s u p v a l u e .
T h e f a c t o r i a l
4 t h e r e f o r e
= 2 3 4 =
H e r e e x a m p l e p r o g r a m :
f a c t o r i a l . c
v o i d
m a i n
n u m ,
f l o a t
f a c t o r i a l ;
p r i n t f ( P l e a s e
i n p u t n u m b e r :
s c a n f ( d , & n u m ) ;
n u m ;
f a c t o r i a l / * I n i t i a l i z e
w h i l e ( i
f a c t o r i a l f a c t o r i a l
p r i n t f ( % d % f \ n , n u m , f a c t o r i a l ) ;
4 6
7/25/2019 Amiga C for Beginners
55/308
7/25/2019 Amiga C for Beginners
56/308
L o o p s
A m i g a
C f o r B e g i n n e r s
5 2 f o r L o o p s
A n o t h e r
l o o p b e
c o n s t r u c t e d u s i n g f o r s t a t e m e n t B A S I C
c o m m a n d u s e d
a s f o l l o w s :
F O R
S T E P
N E X T
C t h i s a p p e a r s a s f o l l o w s :
f o r i < = 1 0 0 ;
C
d o e s n t
r e q u i r e n e x t B A S I C , s i n c e o n l y
s t a t e m e n t b l o c k
f o l l o w i n g l o o p
h e a d e r
e x e c u t e d . W i t h i n
p a r e n t h e s e s
s o m e
i n t e r e s t i n g i t e m s T h e r e a r e t h r e e i n d i v i d u a l s t a t e m e n t s s e p a r a t e d
f r o m
e a c h o t h e r b y s e m i c o l o n s . A s e m i c o l o n d o e s n o t f o l l o w l a s t e n t r y
T h e l o o p b o d y e n d s h e r e w i t h c l o s i n g p a r e n t h e s i s T h e f i r s t e n t r y
=
a s s i g n s s t a r t i n g v a l u e
t h e v a r i a b l e w h i c h
m o d i f i e d
w i t h i n
t h e l o o p T h e
s t a t e m e n t < = 1 0 0 r e p r e s e n t s t h e
e n d i n g c o n d i t i o n
U n t i l
s a t i s f i e d
l o o p e x e c u t e s . T h e l a s t
p a r t l o o p
b o d y
i n c r e m e n t s d e c r e m e n t s
c o n t r o l
v a r i a b l e s w h i c h w e r e
p r e v i o u s l y
i n i t i a l i z e d
w i t h
s t a r t i n g
v a l u e .
7/25/2019 Amiga C for Beginners
57/308
A b a c u s 5 3 w h i l e
L o o p s
5 3 d o
w h i l e
L o o p s
T h e
l a s t
t y p e
l o o p d o
w h i l e l o o p . T h e
r e a d e r a l r e a d y r e a d
a b o u t w h i l e
l o o p ; t h i s l o o p q u i t e s i m i l a r .
P l e a s e c o m p a r e
t w o p r o g r a m s e c t i o n s b e l o w :
f i r s t
p r o g r a m s e c t i o n
w h i l e
p r i n t f i d \ n ,
s e c o n d p r o g r a m s e c t i o n
p r i n t f i
d \ n ,
w h i l e i
T h e d o b e g i n s d o w h i l e l o o p , a n d w h i l e e n d s t h e l o o p .
T h i s
l e a d s
s m a l l s i g n i f i c a n t d i f f e r e n c e p r o r m
e x e c u t i o n . I n
f i r s t e x a m p l e p r o g r a m c h e c k s v a r i a b l e s t i l l g r e a t e r
t h a n 0
t h e n e x e c u t e s
l o o p o n l y t h e c o n d i t i o n s m e t . s e c o n d
e x a m p l e
t e s t
e x e c u t e d
o n l y a f t e r l o o p h a s a l r e a d y b e e n
e x e c u t e d
o n c e . c o n t a i n s
v a l u e w h i l e
l o o p s k i p p e d ,
u n l i k e d o w h i l e
l o o p
w h i c h
e x e c u t e s
a t l e a s t o n c e .
P l e a s e n o t i c e t h e s e m i c o l o n
w h i c h
m u s t f o l l o w w h i l e . I t i s o f t e n
f o r g o t t e n s i n c e n o r m a l w h i l e l o o p s d o n t s e m i c o l o n s .
t h i s m a t e r i a l c l e a r w i t h o u t f u r t h e r e x a m p l e p r o g r a m s , t h e u s e r
e n c o u r a