Brief Introduction To The C Programming Language: Fred Kuhns (08/13/10) CSE332 - Object Oriented Programming Lab 1
Brief Introduction To The C Programming Language: Fred Kuhns (08/13/10) CSE332 - Object Oriented Programming Lab 1
Brief Introduction To The C Programming Language: Fred Kuhns (08/13/10) CSE332 - Object Oriented Programming Lab 1
Programming Language
return 0;
}
• Notice that the syntax is similar to Java
•What’s new in the above simple program?
– of course you will have to learn the new interfaces and utility
functions defined by the C standard and UNIX
– Pointers will give you the most trouble
1
2
3
4
?
Fred Kuhns (08/13/10) CSE332– Object Oriented Programming Lab 21
QNODE Manipulations
before #define QINSERT_BEFORE(head, node, alist)\
do { \
head node0
*(head)->alist.prev = (node); \
0x100 0 0x1a0 0
(node)->alist.prev = (head)->alist.prev; \
0x104 0x100 0x1a4 0x1a0
(head)->alist.prev = &(node)->alist.next;\
0x108 0x104 0x1a8 0x1a4
(node)->alist.next = (head); \
} while (/* */0)
head node0
0x100 0 0x1a0 0
0x104 0x1a0 0x1a4 0x1a0
0x108 0x104 0x1a8 0x1a4
head node0
0x100 0 0x1a0 0
0x104 0x1a0 0x1a4 0x1a0
0x108 0x104 0x1a8 0x104
head node0
0x100 0 0x1a0 0
0x104 0x1a0 0x1a4 0x1a0
0x108 0x1a4 0x1a8 0x104
head node0
0x100 0 0x1a0 0
0x104 0x1a0 0x1a4 0x100
0x108 0x1a4 0x1a8 0x104
head node0
0x100 0 0x1a0 0
0x104 0x1a0 0x1a4 0x100
0x108 0x1a4 0x1a8 0x104
(2)
Fred Kuhns (08/13/10) CSE332– Object Oriented Programming Lab 29
Adding a Third Node
head node0 #define QINSERT_BEFORE(head, node1, alist)\
0x100 0 0x1a0 0 do { \
0x104 0x1a0 0x1a4 0x100 (1) *(head)->alist.prev = (node1); \
0x108 0x1a4 0x1a8 0x104 (2) (node1)->alist.prev = (head)->alist.prev; \
(3) (head)->alist.prev = &(node1)->alist.next; \
node1 (node1)->alist.next = (head); \
0x200 0
} while (/* */0)
0x204 0x200
0x208 0x204
QREMOVE(node0, alist);
Tokens
Operator
Class
Precedence
Associates
Tokens
Operator
Class
Precedence
Associates
names, simple tokens primary 16 n/a (type) casts unary 14 right-to-left
literals
* / % multiplicative binary 13 left-to-right
a[k] subscripting postfix left-to-right
+ - additive binary 12 left-to-right
f(...) function call postfix left-to-right
<< >> left, right shift binary 11 left-to-right
. direct selection postfix left-to-right
< <= > >= relational binary 10 left-to-right
-> indirect selection postfix left to right == != equality/ineq. binary 9 left-to-right
++ -- increment, decrement postfix left-to-right & bitwise and binary 8 left-to-right
(type){init} compound literal postfix left-to-right ^ bitwise xor binary 7 left-to-right
++ -- increment, decrement prefix 15 right-to-left | bitwise or binary 6 left-to-right
sizeof size unary right-to-left && logical and binary 5 left-to-right
~ bitwise not unary right-to-left || logical or binary 4 left-to-right
! logical not unary right-to-left ?: conditional ternary 3 right-to-left
- + negation, plus unary right-to-left = += -= assignment binary 2 right-to-left
& address of unary right-to-left *= /= %=
* &= ^= |=
indirection unary right-to-left
<<= >>=
(dereference)
, sequential eval. binary 1 left-to-right
• unions
– union MyUnion {int x; MyPoint_t pt; struct {int
3; char c[4]} S;};
– union MyUnion x;
– Can only use one of the elements. Memory will be allocated for
the largest element
• flow control
– break – exit innermost loop
– continue – perform next iteration of loop
• Note, all these forms permit one statement to be executed. By
enclosing in brackets we create a block of statements.