The Design of C: A Rational Reconstruction: Part 2

Similar documents
Continued from previous lecture

Princeton University Computer Science 217: Introduction to Programming Systems The Design of C

The Design of C: A Rational Reconstruction (cont.)

The Design of C: A Rational Reconstruction (cont.)" Jennifer Rexford!

Goals of C "" The Goals of C (cont.) "" Goals of this Lecture"" The Design of C: A Rational Reconstruction"

The Arithmetic Operators. Unary Operators. Relational Operators. Examples of use of ++ and

The Arithmetic Operators

C programming basics T3-1 -

Standard C Library Functions

Lecture 02 C FUNDAMENTALS

Standard File Pointers

SECTION II: LANGUAGE BASICS

Computers Programming Course 6. Iulian Năstac

Princeton University COS 333: Advanced Programming Techniques A Subset of C90

Arithmetic Operators. Portability: Printing Numbers

Programming for Engineers Iteration

Fundamental of Programming (C)

ENG120. Misc. Topics

Lecture 3. More About C

File Handling in C. EECS 2031 Fall October 27, 2014


SWEN-250 Personal SE. Introduction to C

Introduction. Following are the types of operators: Unary requires a single operand Binary requires two operands Ternary requires three operands

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

C OVERVIEW BASIC C PROGRAM STRUCTURE. C Overview. Basic C Program Structure

CSCI 171 Chapter Outlines

File IO and command line input CSE 2451

C OVERVIEW. C Overview. Goals speed portability allow access to features of the architecture speed

Variables and literals

Work relative to other classes

C - Basics, Bitwise Operator. Zhaoguo Wang

Reserved Words and Identifiers

C Input/Output. Before we discuss I/O in C, let's review how C++ I/O works. int i; double x;

Fundamentals of Programming

Topic 8: I/O. Reading: Chapter 7 in Kernighan & Ritchie more details in Appendix B (optional) even more details in GNU C Library manual (optional)

Writing an ANSI C Program Getting Ready to Program A First Program Variables, Expressions, and Assignments Initialization The Use of #define and

The Design of C: A Rational Reconstruction"

Chapter 3: Operators, Expressions and Type Conversion

Operators. Java operators are classified into three categories:

Input / Output Functions

Expressions and Precedence. Last updated 12/10/18

PRINCIPLES OF OPERATING SYSTEMS

EECS2031. Modifiers. Data Types. Lecture 2 Data types. signed (unsigned) int long int long long int int may be omitted sizeof()

Quick Reference Guide

CS313D: ADVANCED PROGRAMMING LANGUAGE

C Language Part 1 Digital Computer Concept and Practice Copyright 2012 by Jaejin Lee

Basic operators, Arithmetic, Relational, Bitwise, Logical, Assignment, Conditional operators. JAVA Standard Edition

CprE 288 Introduction to Embedded Systems Exam 1 Review. 1

Princeton University COS 333: Advanced Programming Techniques A Subset of PHP

Course Outline Introduction to C-Programming

Advanced C Programming Topics

C/Java Syntax. January 13, Slides by Mark Hancock (adapted from notes by Craig Schock)

C/Java Syntax. Lecture 02 Summary. Keywords Variable Declarations Data Types Operators Statements. Functions. if, switch, while, do-while, for

Outline. Performing Computations. Outline (cont) Expressions in C. Some Expression Formats. Types for Operands

DETAILED SYLLABUS INTRODUCTION TO C LANGUAGE

Operators & Expressions

File I/O. Arash Rafiey. November 7, 2017

UNIT 3 OPERATORS. [Marks- 12]

The Design of C: A Rational Reconstruction

Operators in C. Staff Incharge: S.Sasirekha

A complex expression to evaluate we need to reduce it to a series of simple expressions. E.g * 7 =>2+ 35 => 37. E.g.

Pointers cause EVERYBODY problems at some time or another. char x[10] or char y[8][10] or char z[9][9][9] etc.

Applied Programming and Computer Science, DD2325/appcs15 PODF, Programmering och datalogi för fysiker, DA7011

C Concepts - I/O. Lecture 19 COP 3014 Fall November 29, 2017

A flow chart is a graphical or symbolic representation of a process.

CS113: Lecture 7. Topics: The C Preprocessor. I/O, Streams, Files

Recap. ANSI C Reserved Words C++ Multimedia Programming Lecture 2. Erwin M. Bakker Joachim Rijsdam

Lecture 02 Summary. C/Java Syntax 1/14/2009. Keywords Variable Declarations Data Types Operators Statements. Functions

Operators in java Operator operands.

Character Set. The character set of C represents alphabet, digit or any symbol used to represent information. Digits 0, 1, 2, 3, 9

Guide for The C Programming Language Chapter 1. Q1. Explain the structure of a C program Answer: Structure of the C program is shown below:

Review of the C Programming Language for Principles of Operating Systems

Topic 6: A Quick Intro To C

The Design of C: A Rational Reconstruction" Jennifer Rexford!

Introduction to C. Systems Programming Concepts

Iteration. Side effects

Lecture 03 Bits, Bytes and Data Types

Control Flow. COMS W1007 Introduction to Computer Science. Christopher Conway 3 June 2003

Programming Languages: Part 2. Robert M. Dondero, Ph.D. Princeton University

ISA 563 : Fundamentals of Systems Programming

Data Types and Variables in C language

Fundamental Data Types. CSE 130: Introduction to Programming in C Stony Brook University

B.V. Patel Institute of Business Management, Computer & Information Technology, Uka Tarsadia University

Control Structures. Lecture 4 COP 3014 Fall September 18, 2017

File (1A) Young Won Lim 11/25/16

Operators and Expressions:

Stream Model of I/O. Basic I/O in C

Programming with Java

Sir Muhammad Naveed. Arslan Ahmed Shaad ( ) Muhammad Bilal ( )

Full file at

GO - OPERATORS. This tutorial will explain the arithmetic, relational, logical, bitwise, assignment and other operators one by one.

C Basics And Concepts Input And Output

C-LANGUAGE CURRICULAM

JAVA OPERATORS GENERAL

Unit 3. Operators. School of Science and Technology INTRODUCTION

3. Java - Language Constructs I

CS2141 Software Development using C/C++ C++ Basics

C for C++ Programmers

Java provides a rich set of operators to manipulate variables. We can divide all the Java operators into the following groups:

C Programming Language (Chapter 2 of K&R) Variables and Constants

Transcription:

The Design of C: A Rational Reconstruction: Part 2 1

Continued from previous lecture 2

Agenda Data Types Operators Statements I/O Facilities 3

Operators Issue: What kinds of operators should C have? Thought process Should handle typical operations Should handle bit-level programming ("bit twiddling") Should provide a mechanism for converting from one type to another 4

Operators Decisions Provide typical arithmetic operators: + - * / % Provide typical relational operators: ==!= < <= > >= Each evaluates to 0 => FALSE or 1 => TRUE Provide typical logical operators:! && Each interprets 0 => FALSE, non-0 => TRUE Each evaluates to 0 => FALSE or 1 =>TRUE Provide bitwise operators: ~ & ^ >> << Provide a cast operator: (type) 5

Aside: Logical vs. Bitwise Ops Logical NOT vs. bitwise NOT!0x00000010 => 0x00000000 (FALSE) ~0x00000010 => 0xFFFFFFEF (TRUE) Logical AND vs. bitwise AND 0x00000010 && 0x00000001 => 0x00000001 (TRUE) 0x00000010 & 0x00000001 => 0x00000000 (FALSE) Moral: Use logical operators to control flow of logic Use bitwise operators only when doing bit-level manipulation 6

Assignment Operator Issue: What about assignment? Thought process Must have a way to assign a value to a variable Many high-level languages provide an assignment statement Would be more succinct to define an assignment operator Performs assignment, and then evaluates to the assigned value Allows assignment expression to appear within larger expressions 7

Assignment Operator Decisions Provide assignment operator: = Changes the value of a variable Evaluates to the new value of the variable 8

Assignment Operator Examples Examples i = 0; /* Assign 0 to i. Evaluate to 0. Discard the 0. */ i = j = 0; /* Assign 0 to j. Evaluate to 0. Assign 0 to i. Evaluate to 0. Discard the 0. */ while ((i = getchar())!= EOF) /* Read a character. Assign it to i. Evaluate to that character. Compare that character to EOF. Evaluate to 0 (FALSE) or 1 (TRUE). */ 9

Special-Purpose Assignment Operators Issue: Should C provide special-purpose assignment operators? Thought process The construct i = i + 1 is common More generally, i = i + n and i = i * n are common Special-purpose assignment operators would make code more compact Such operators would complicate the language and compiler 10

Special-Purpose Assignment Operators Decisions Provide increment and decrement operators: ++ -- Prefix and postfix forms Provide special-purpose assignment operators: += -= *= /= ~= &= = ^= <<= >>= Examples i = 5; j = ++i; i = 5; j = i++; What is the value of i? Of j? 11

Sizeof Operator Issue: How can programmers determine data sizes? Thought process The sizes of most primitive types are unspecified C must provide a way to determine the size of a given data type programmatically 12

Sizeof Operator Decisions Provide a sizeof operator Applied at compile-time Operand can be a data type Operand can be an expression Compiler infers a data type Examples, on nobel using gcc217 sizeof(int) => 4 When i is a variable of type int sizeof(i) => 4 sizeof(i+1) sizeof(i++ * ++i 5) What is the value? 13

Other Operators Issue: What other operators should C have? Decisions Function call operator Should mimic the familiar mathematical notation function(arg1, arg2, ) Conditional operator:?: The only ternary operator See King book Sequence operator:, See King book Pointer-related operators: & * Described later in the course Structure-related operators:. -> Described later in the course 14

Operators Summary: C vs. Java Java only >>> right shift with zero fill new create an object instanceof is left operand an object of class right operand? C only -> structure member select * dereference & address of, sequence sizeof compile-time size of 15

Operators Summary: C vs. Java Related to type boolean: Java: Relational and logical operators evaluate to type boolean C: Relational and logical operators evaluate to type int Java: Logical operators take operands of type boolean C: Logical operators take operands of any primitive type or memory address 16

Agenda Data Types Operators Statements I/O Facilities 17

Sequence Statement Issue: How should C implement sequence? Decision Compound statement, alias block { } statement1; statement2; 18

Selection Statements Issue: How should C implement selection? Decisions if statement, for one-path, two-path decisions if (expr) statement1; if (expr) statement1; else statement2; 0 => FALSE non-0 => TRUE 19

Selection Statements Decisions (cont.) switch and break statements, for multi-path decisions on a single integerexpr switch (integerexpr) { case integerliteral1: break; case integerliteral2: break; default: } What happens if you forget break? 20

Repetition Statements Issue: How should C implement repetition? Decisions while statement; test at leading edge while (expr) statement; for statement; test at leading edge, increment at trailing edge for (initialexpr; testexpr; incrementexpr) statement; do while statement; test at trailing edge do statement; while (expr); 0 => FALSE non-0 => TRUE 21

Repetition Statements Decisions (cont.) Cannot declare loop control variable in for statement { } for (int i = 0; i < 10; i++) /* Do something */ Illegal in C { } int i; for (i = 0; i < 10; i++) /* Do something */ Legal in C 22

Other Control Statements Issue: What other control statements should C provide? Decisions break statement (revisited) Breaks out of closest enclosing switch or repetition statement continue statement Skips remainder of current loop iteration Continues with next loop iteration When used within for, still executes incrementexpr goto statement Jump to specified label 23

Declaring Variables Issue: Should C require variable declarations? Thought process: Declaring variables allows compiler to check spelling Declaring variables allows compiler to allocate memory more efficiently 24

Declaring Variables Decisions: Require variable declarations Provide declaration statement Programmer specifies type of variable (and other attributes too) Examples int i; int i, j; int i = 5; const int i = 5; /* value of i cannot change */ static int i; /* covered later in course */ extern int i; /* covered later in course */ 25

Declaring Variables Decisions (cont.): Declaration statements must appear before any other kind of statement in compound statement { } int i; /* Non-declaration stmts that use i. */ int j; /* Non-declaration stmts that use j. */ { } int i; int j; /* Non-declaration stmts that use i. */ /* Non-declaration stmts that use j. */ Illegal in C Legal in C 26

Computing with Expressions Issue: How should C implement computing with expressions? Decisions: Expression statement: expression ; 27

Computing with Expressions Examples i = 5; /* Side effect: set value of i to 5. Evaluate to 5. Discard the 5. */ j = i + 1; /* Side effect: set value of j to 6. Evaluate to 6. Discard the 6. */ printf("hello"); /* Side effect: print hello. Evaluate to 5. Discard the 5. */ i + 1; /* Evaluate to 6. Discard the 6. */ 5; /* Evaluate to 5. Discard the 5. */ 28

Statements Summary: C vs. Java Declaration statement: Java: Compile-time error to use a local variable before specifying its value C: Run-time error to use a local variable before specifying its value final and const Java: Has final variables C: Has const variables Expression statement Java: Only expressions that have a side effect can be made into expression statements C: Any expression can be made into an expression statement 29

Statements Summary: C vs. Java Compound statement: Java: Declarations statements can be placed anywhere within compound statement C: Declaration statements must appear before any other type of statement within compound statement if statement Java: Controlling expr must be of type boolean C: Controlling expr can be any primitive type or a memory address (0 => FALSE, non-0 => TRUE) while statement Java: Controlling expr must be of type boolean C: Controlling expr can be any primitive type or a memory address (0 => FALSE, non-0 => TRUE) 30

Statements Summary: C vs. Java do while statement Java: Controlling expr must be of type boolean C: Controlling expr can be of any primitive type or a memory address (0 => FALSE, non-0 => TRUE) for statement Java: Controlling expr must be of type boolean C: Controlling expr can be of any primitive type or a memory address (0 => FALSE, non-0 => TRUE) Loop control variable Java: Can declare loop control variable in initexpr C: Cannot declare loop control variable in initexpr 31

Statements Summary: C vs. Java break statement Java: Also has labeled break statement C: Does not have labeled break statement continue statement Java: Also has labeled continue statement C: Does not have labeled continue statement goto statement Java: Not provided C: Provided (but don t use it!) 32

Agenda Data Types Operators Statements I/O Facilities 33

I/O Facilities Issue: Should C provide I/O facilities? Thought process Unix provides the file abstraction A file is a sequence of characters with an indication of the current position Unix provides 3 standard files Standard input, standard output, standard error C should be able to use those files, and others I/O facilities are complex C should be small/simple 34

I/O Facilities Decisions Do not provide I/O facilities in the language Instead provide I/O facilities in standard library Constant: EOF Data type: FILE (described later in course) Variables: stdin, stdout, and stderr Functions: 35

Reading/Writing Characters Issue: What functions should C provide for reading & writing characters? Thought process Need function to read a single character from stdin And indicate failure Need function to write a single character to stdout 36

Reading/Writing Characters Decisions Provide getchar() and putchar() functions Define getchar() to return EOF upon failure EOF is a special non-character int Make return type of getchar() wider than char Make it int; that's the natural word size Make putchar() take int for symmetry Reminder There is no such thing as the EOF character 37

Writing Other Data Types Issue: What functions should C provide for writing data of other primitive types? Thought process Must convert internal form to external form (sequence of character codes) Could provide putshort(), putint(), putfloat(), etc. Could provide parameterized function to write any primitive type of data 38

Writing Other Data Types Decisions Provide printf() function Can write any primitive type of data First parameter is a format string containing conversion specifications 39

Writing Other Data Types 123 00000000000000000000000001111011 printf("%d", i); 011000010110001001100011 '1' '2' '3' See King book for conversion specifications 40

Reading Other Data Types Issue: What functions should C provide for reading data of other primitive types? Thought process Must convert external form (sequence of character codes) to internal form Could provide getshort(), getint(), getfloat(), etc. Could provide parameterized function to read any primitive type of data 41

Reading Other Data Types Decisions Provide scanf() function Can read any primitive type of data First parameter is a format string containing conversion specifications 42

Reading Other Data Types '1' '2' '3' 011000010110001001100011 scanf("%d", &i); What is this ampersand? Covered later in course. 00000000000000000000000001111011 123 See King book for conversion specifications 43

Other I/O Facilities Issue: What other I/O functions should C provide? Decisions fopen(): Open a stream fclose(): Close a stream fgetc(): Read a character from specified stream fputc(): Write a character to specified stream fgets(): Read a line/string from specified stream fputs(): Write a line/string to specified stream fscanf(): Read data from specified stream fprintf(): Write data to specified stream Described in King book, and later in the course after covering files, arrays, and strings 44

Summary C design decisions and the goals that affected them Data types Operators Statements I/O facilities Knowing the design goals and how they affected the design decisions can yield a rich understanding of C 45

Appendix: The Cast Operator Cast operator has multiple meanings: (1) Cast between integer type and floating point type: Compiler generates code At run-time, code performs conversion f 11000001110110110000000000000000-27.375 i = (int)f i 11111111111111111111111111100101-27 46

Appendix: The Cast Operator (2) Cast between floating point types of different sizes: Compiler generates code At run-time, code performs conversion f 11000001110110110000000000000000-27.375 d = (double)f d 11000000001110110110000000000000 00000000000000000000000000000000-27.375 47

Appendix: The Cast Operator (3) Cast between integer types of different sizes: Compiler generates code At run-time, code performs conversion i 000000000000000000000000000000102 2 c = (char)i c 00000010 2 48

Appendix: The Cast Operator (4) Cast between integer types of same size: Compiler generates no code Compiler views given bit-pattern in a different way i 111111111111111111111111111111102-2 u = (unsigned int)i u 11111111111111111111111111111110 4294967294 49