Introduction to C Geared toward programmers Robert Escriva Slide - - PowerPoint PPT Presentation

introduction to c
SMART_READER_LITE
LIVE PREVIEW

Introduction to C Geared toward programmers Robert Escriva Slide - - PowerPoint PPT Presentation

Introduction to C Introduction to C Geared toward programmers Robert Escriva Slide heritage: Alin Dobra Niranjan Nagarajan Owen Arden Cornell CS 4411, August 30, 2010 Introduction to C Why C? 1 A Quick Example 2 Programmers


slide-1
SLIDE 1

Introduction to C

Introduction to C

Geared toward programmers

Robert Escriva

Slide heritage: Alin Dobra → Niranjan Nagarajan → Owen Arden

Cornell CS 4411, August 30, 2010

slide-2
SLIDE 2

Introduction to C

1

Why C?

2

A Quick Example

3

Programmer’s Responsibilities

4

Language Basics Pointers and Memory Management

5

Program Structure

6

Style

slide-3
SLIDE 3

Introduction to C Why C?

Portability

Most operating systems have a C compiler available ... ... (partially) because most operating systems are written in C. Linux, {Free,Open,Net,Dragonfly}BSD, Minix, XNU

slide-4
SLIDE 4

Introduction to C Why C?

Predictability

No unintended memory allocations. Control of layout of structures in memory. Simple syntax makes determining behavior easy.

slide-5
SLIDE 5

Introduction to C Why C?

Power

Direct manipulation of control flow. Complex datastructure creation. Assembly is just a step away.

slide-6
SLIDE 6

Introduction to C Why C?

But great power can corrupt... ∗

∗which will it be, the stack or the heap?

slide-7
SLIDE 7

Introduction to C Why C?

Goals for today

Provide a broad base for using/learning C. Warn you of pitfalls related to C programming. Practice reading/writing C.

slide-8
SLIDE 8

Introduction to C A Quick Example

Hello World

#include <stdio.h> int main(int argc, char* argv[]) { printf("Hello World!\n"); }

slide-9
SLIDE 9

Introduction to C A Quick Example

Try it out

Create hello.c†. In a VS2008 command prompt run:

cl hello.c

Now run the hello.exe binary.

†or fetch it from the course webpage

slide-10
SLIDE 10

Introduction to C A Quick Example

Learning a new language

Languages are largely the same.

Notice the similarities. Control structures (loops, conditionals, etc.) Data types (int, char, classes, etc)

Embrace diversity.

Play on a language’s strengths. Don’t use a square peg for a round hole.

slide-11
SLIDE 11

Introduction to C Programmer’s Responsibilities

The Programmer’s Responsibilities

Memory maintenance (no automatic garbage collection here). Error handling (no exceptions here).

slide-12
SLIDE 12

Introduction to C Language Basics

Language Basics

Control flow Data types Operators Preprocessor

slide-13
SLIDE 13

Introduction to C Language Basics

Control Flow

if (x) { } else if (y) { } else { } for (pre(); loop_invariant(); post()) { } while (x) { } do { } while (x); switch (x) { case 0: break; default: act(); }

slide-14
SLIDE 14

Introduction to C Language Basics

Operators

Arithmetic: +, -, *, /, % Relational: <, >, <=, >=, ==, != Logical: &&, ||, !, ?: Bitwise: &, |, ˆ, !, «, »

slide-15
SLIDE 15

Introduction to C Language Basics

Primitives

Integer types:

char : character, typically one byte. int, short, long : integers of different sizes. Optional prefixes signed or unsigned.

Floating point types:

float : single-precision floating point. double : double-precision floating point.

No booleans:

0 ⇒ false = 0 ⇒ true

slide-16
SLIDE 16

Introduction to C Language Basics

Sample Primitive Declarations

char a = ’A’; char b = 65; char c = 0x41; int i = -2343234; unsigned int ui = 4294967295; unsigned int uj = ((long) 1 << 32) - 1; unsigned int uk = -1; float pi = 3.14; double long_pi = 0.31415e+1;

slide-17
SLIDE 17

Introduction to C Language Basics

Enums

enum months { JANUARY, FEBRUARY, MARCH }; enum days { SUNDAY, TUESDAY = 2, WEDNESDAY }; Values are consecutive integers starting from zero. Explicitly assigning a value causes the sequence to continue from that value (e.g., WEDNESDAY == 3).

slide-18
SLIDE 18

Introduction to C Language Basics

Preprocessor

Inclusion of other files: #include <header.h> Definition of constants: #define HOURS_PER_DAY 24 Creation of macros: #define CELSIUS(F) ((F - 32) * 5/9.)

slide-19
SLIDE 19

Introduction to C Language Basics Pointers and Memory Management

Pointers hold memory addresses

An int: int foo; Pointer to an int: int* ptr_foo; Pointer to a pointer to an int: int** ptr_foo;

slide-20
SLIDE 20

Introduction to C Language Basics Pointers and Memory Management

Pointer operations

Obtain the address of a variable: ‘&’ Dereference a memory address: ‘*’

slide-21
SLIDE 21

Introduction to C Language Basics Pointers and Memory Management

Pointer Example

int x; int* ptr; /* ptr points to an undefined location */ ptr = &x; /* ptr now points to integer x */ *ptr = 3; /* integer pointed to by ptr is now 3 */

slide-22
SLIDE 22

Introduction to C Language Basics Pointers and Memory Management

Global Variables

Declared outside all functions. Space allocated before execution. Space deallocated at program exit. Learn the meanings of static and extern.

slide-23
SLIDE 23

Introduction to C Language Basics Pointers and Memory Management

Local Variables

Declared at the start of the function. Space is allocated on the stack. Initialized before function execution. Deallocated when leaving the function scope.

Also known as deleting the stack “frame”.

slide-24
SLIDE 24

Introduction to C Language Basics Pointers and Memory Management

Heap Variables

Allocate with malloc() and deallocate with free(). void* malloc(int) void free(void*) It is up to you to manage memory. Never calling free() leaks memory. Calling free() more than once will crash your

  • program. ‡

‡Known as a “double free” bug, and is sometimes exploitable.

slide-25
SLIDE 25

Introduction to C Language Basics Pointers and Memory Management

Malloc/Free Example

int* ptr; /* pointer to an int */ /* allocate space to hold an int */ ptr = (int*) malloc(sizeof(int)); /* check if successful */ if (ptr == NULL) exit(1); *ptr = 4; /* store value 4 in the int */ printf("ptr: %p %d\n", ptr, *ptr); /* deallocate memory */ free(ptr);

slide-26
SLIDE 26

Introduction to C Language Basics Pointers and Memory Management

Warning

Dereferencing an un-initialized pointer can crash your program (or worse)! Consider initializing a pointer to NULL and checking before dereferencing. Some functions return NULL on error.

Pay attention to the function specification! Check return values!

slide-27
SLIDE 27

Introduction to C Language Basics Pointers and Memory Management

Arrays and Strings

Arrays for (i = 0; i < 10; ++i) { A[i] = i * i; } Strings char name[] = "CS4410"; name[5] = ’1’; Functions to operate on strings in string.h.

strncpy, strncmp, strncat, strstr, strchr

slide-28
SLIDE 28

Introduction to C Program Structure

Functions

Arguments can be passed:

by value: a copy of the parameter is passed into the function. by reference: a pointer is passed into the function.

Return values are also by value or by reference.

slide-29
SLIDE 29

Introduction to C Program Structure

Pass by Value

swap_value() only changes n1 and n2 within the local scope. void swap_value(int n1, int n2) { int temp; temp = n1; n1 = n2; n2 = temp; }

slide-30
SLIDE 30

Introduction to C Program Structure

Pass by Reference

swap_reference() changes the values at the memory locations pointed to by p1 and p2. void swap_reference(int* p1, int* p2) { int temp; temp = *p1; *p1 = *p2; *p2 = temp; }

slide-31
SLIDE 31

Introduction to C Program Structure

Function Pointers

int inc(int i) { return i + 1; } int dec(int i) { return i - 1; } int apply(int (*f)(int), int i) { return f(i); } int main(int argc, char* argv[]) { printf("++: %i\n", apply(inc, 10)); printf("--: %i\n", apply(dec, 10)); return 0; }

slide-32
SLIDE 32

Introduction to C Program Structure

Structures

struct list_elem { int data; struct list_elem* next; }; int main(int argc, char* argv[]) { struct list_elem le = { 10, NULL }; le.data = 20; return 0; }

slide-33
SLIDE 33

Introduction to C Program Structure

Typedefs

Create an alias for a type. Syntax: typedef type alias Use it like any primitive: list_elem_t le; typedef struct list_elem { int data; struct list_elem* next; } list_elem_t;

slide-34
SLIDE 34

Introduction to C Style

Code Style

Write comments where appropriate!

Bad comment: /* print the value of x */ Good comment: /* take one process off the ready queue */

Avoid magic numbers.

Create logically named constants.

slide-35
SLIDE 35

Introduction to C Style

Code Style : Organization

Pick a style (e.g., K&R, Allman, BSD, GNU) and stick with it. Use a consistent style for naming variables and functions. Split large functions into smaller functions. Your dependency graph should be more like a spanning tree than a clique.

slide-36
SLIDE 36

Introduction to C Style

Build Tools and Version Control

Build systems:

Organizes compilation commands and dependencies. Repeatable, incremental compiling. make, pmake, cmake, scons, etc.

Version control:

Keep track of all changes. Simplifies merging changes from all developers. Git, Subverion, CVS, Mercurial, etc.

slide-37
SLIDE 37

Introduction to C Style

Summary

C is a great language (especially for systems work). Learn by doing. All examples are on the course web page. Save yourself some trouble:

Initialize variables before use. Don’t return pointers to stack-based variables. Allocate and deallocate memory properly. Check return values.