Introduction to C. Robert Escriva. Cornell CS 4411, August 30, Geared toward programmers

Similar documents
Introduction to C. Ayush Dubey. Cornell CS 4411, August 31, Geared toward programmers

Introduction to C. Sean Ogden. Cornell CS 4411, August 30, Geared toward programmers

Introduction to C. Zhiyuan Teo. Cornell CS 4411, August 26, Geared toward programmers

Design and development of embedded systems for the Internet of Things (IoT) Fabio Angeletti Fabrizio Gattuso

Ricardo Rocha. Department of Computer Science Faculty of Sciences University of Porto

PRINCIPLES OF OPERATING SYSTEMS

CS 261 Fall C Introduction. Variables, Memory Model, Pointers, and Debugging. Mike Lam, Professor

Pointers, Dynamic Data, and Reference Types

C Introduction. Comparison w/ Java, Memory Model, and Pointers

Class Information ANNOUCEMENTS

CS 61c: Great Ideas in Computer Architecture

CSC 1600 Memory Layout for Unix Processes"

Motivation was to facilitate development of systems software, especially OS development.

Motivation was to facilitate development of systems software, especially OS development.

Outline. Lecture 1 C primer What we will cover. If-statements and blocks in Python and C. Operators in Python and C

Kurt Schmidt. October 30, 2018

Lectures 5-6: Introduction to C

Dynamic memory allocation (malloc)

A brief introduction to C programming for Java programmers

Short Notes of CS201

Programming in C - Part 2

Two s Complement Review. Two s Complement Review. Agenda. Agenda 6/21/2011

CS201 - Introduction to Programming Glossary By

Intermediate Programming, Spring 2017*

Lectures 5-6: Introduction to C

C: Pointers, Arrays, and strings. Department of Computer Science College of Engineering Boise State University. August 25, /36

C BOOTCAMP DAY 2. CS3600, Northeastern University. Alan Mislove. Slides adapted from Anandha Gopalan s CS132 course at Univ.

CS 61C: Great Ideas in Computer Architecture Introduction to C

C Review. MaxMSP Developers Workshop Summer 2009 CNMAT

o Code, executable, and process o Main memory vs. virtual memory

High-performance computing and programming Intro to C on Unix/Linux. Uppsala universitet

INITIALISING POINTER VARIABLES; DYNAMIC VARIABLES; OPERATIONS ON POINTERS

From Java to C. Thanks to Randal E. Bryant and David R. O'Hallaron (Carnegie-Mellon University) for providing the basis for these slides

CS 11 C track: lecture 5

CS 326 Operating Systems C Programming. Greg Benson Department of Computer Science University of San Francisco

CSCI-243 Exam 1 Review February 22, 2015 Presented by the RIT Computer Science Community

CS 61C: Great Ideas in Computer Architecture. C Arrays, Strings, More Pointers

Understanding Pointers

CSCI 171 Chapter Outlines

COMP 2355 Introduction to Systems Programming

Quick review pointer basics (KR ch )


Contents. A Review of C language. Visual C Visual C++ 6.0

Lecture 14. No in-class files today. Homework 7 (due on Wednesday) and Project 3 (due in 10 days) posted. Questions?

EMBEDDED SYSTEMS PROGRAMMING Language Basics

Under the Hood: Data Representations, Memory and Bit Operations. Computer Science 104 Lecture 3

CS 61C: Great Ideas in Computer Architecture C Pointers. Instructors: Vladimir Stojanovic & Nicholas Weaver

EL2310 Scientific Programming

Arrays and Memory Management

CS 31: Intro to Systems Pointers and Memory. Martin Gagne Swarthmore College February 16, 2016

C Programming. Course Outline. C Programming. Code: MBD101. Duration: 10 Hours. Prerequisites:

ME964 High Performance Computing for Engineering Applications

Review: C Strings. A string in C is just an array of characters. Lecture #4 C Strings, Arrays, & Malloc

Announcements. assign0 due tonight. Labs start this week. No late submissions. Very helpful for assign1

Dynamic Memory Allocation and Command-line Arguments

CS61C Machine Structures. Lecture 4 C Structs & Memory Management. 9/5/2007 John Wawrzynek. www-inst.eecs.berkeley.edu/~cs61c/

Arrays and Pointers in C. Alan L. Cox

CprE 288 Introduction to Embedded Systems Exam 1 Review. 1

CS 61c: Great Ideas in Computer Architecture

Review of the C Programming Language for Principles of Operating Systems

In Java we have the keyword null, which is the value of an uninitialized reference type

Agenda. Peer Instruction Question 1. Peer Instruction Answer 1. Peer Instruction Question 2 6/22/2011

Variables Data types Variable I/O. C introduction. Variables. Variables 1 / 14

High Performance Programming Programming in C part 1

Running a C program Compilation Python and C Variables and types Data and addresses Functions Performance. John Edgar 2

Memory (Stack and Heap)

CS 61C: Great Ideas in Computer Architecture. Lecture 3: Pointers. Bernhard Boser & Randy Katz

Lecture07: Strings, Variable Scope, Memory Model 4/8/2013

COMP 2355 Introduction to Systems Programming

CS61C : Machine Structures

Memory Corruption 101 From Primitives to Exploit

CS 330 Lecture 18. Symbol table. C scope rules. Declarations. Chapter 5 Louden Outline

Recitation: Cache Lab & C

THE GOOD, BAD AND UGLY ABOUT POINTERS. Problem Solving with Computers-I

Strings in C. Professor Hugh C. Lauer CS-2303, System Programming Concepts

CS61C : Machine Structures

Programming in C. What is C?... What is C?

CS349/SE382 A1 C Programming Tutorial

CS61C Machine Structures. Lecture 3 Introduction to the C Programming Language. 1/23/2006 John Wawrzynek. www-inst.eecs.berkeley.

CSE 333 Lecture 7 - final C details

CS 220: Introduction to Parallel Computing. Beginning C. Lecture 2

CSC C69: OPERATING SYSTEMS

Deep C. Multifile projects Getting it running Data types Typecasting Memory management Pointers. CS-343 Operating Systems

POINTER AND ARRAY SUNU WIBIRAMA

CMSC 313 COMPUTER ORGANIZATION & ASSEMBLY LANGUAGE PROGRAMMING LECTURE 13, FALL 2012

CS 0449 Sample Midterm

C: Introduction, Pointers Instructors: Steven Ho, Nick Riasanovsky

Basic C Programming (2) Bin Li Assistant Professor Dept. of Electrical, Computer and Biomedical Engineering University of Rhode Island

Memory. What is memory? How is memory organized? Storage for variables, data, code etc. Text (Code) Data (Constants) BSS (Global and static variables)

Quiz 0 Review Session. October 13th, 2014

Tutorial 1: Introduction to C Computer Architecture and Systems Programming ( )

Procedures, Parameters, Values and Variables. Steven R. Bagley

[0569] p 0318 garbage

CMPE-013/L. Introduction to C Programming

Pointers, Arrays, Memory: AKA the cause of those Segfaults

ECE 250 / CS 250 Computer Architecture. C to Binary: Memory & Data Representations. Benjamin Lee

211: Computer Architecture Summer 2016

Programming in C. What is C?... What is C?

Programming in C UVic SEng 265

Structures and Pointers

Transcription:

Introduction to C Geared toward programmers Robert Escriva Slide heritage: Alin Dobra Niranjan Nagarajan Owen Arden Cornell CS 4411, August 30, 2010

1 Why C? 2 A Quick Example 3 Programmer s Responsibilities 4 Language Basics Pointers and Memory Management 5 Program Structure 6 Style

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

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

Why C? Power Direct manipulation of control flow. Complex datastructure creation. Assembly is just a step away.

Introduction to C Why C? But great power can corrupt... which will it be, the stack or the heap?

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.

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

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

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.

Programmer s Responsibilities The Programmer s Responsibilities Memory maintenance (no automatic garbage collection here). Error handling (no exceptions here).

Language Basics Language Basics Control flow Data types Operators Preprocessor

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(); }

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

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

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;

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).

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.)

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;

Language Basics Pointers and Memory Management Pointer operations Obtain the address of a variable: & Dereference a memory address: *

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 */

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.

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.

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.

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);

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!

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

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.

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; }

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; }

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;

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;

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;

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.

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.

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.

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.