Introduction to Functions

34
Introduction to Functions CIS 1057 Fall 2013 1 Introduction to Functions CIS 1057 Computer Programming in C Fall 2013 (Acknowledgement: Many slides based on/borrowed from Professor Hugh C. Lauer. Slides include materials from The C Programming Language, 2 nd edition, by Kernighan and Ritchie and from C: How to Program, 5 th and 6 th editions, by Deitel and Deitel)

description

Introduction to Functions. CIS 1057 Computer Programming in C Fall 2013 (Acknowledgement: Many slides based on/ borrowed from Professor Hugh C. Lauer. - PowerPoint PPT Presentation

Transcript of Introduction to Functions

Page 1: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 1

Introduction to Functions

CIS 1057 Computer Programming inC

Fall 2013(Acknowledgement: Many slides based on/borrowed from Professor Hugh C. Lauer.

Slides include materials from The C Programming Language, 2nd edition, by Kernighan and Ritchie and from C: How to Program, 5th and 6th editions, by Deitel and Deitel)

Page 2: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 2

Definition – Function

• A fragment of code that accepts zero or more argument values, produces a result value, and has zero or more side effects.

• A method of encapsulating a subset of a program or a system

• To hide details

• To be invoked from multiple places

• To share with others

Page 3: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 3

Functions – a big Topic

• Examples

• Function definition

• Function prototypes & Header files

• Pre- and post-conditions

• Scope and storage class

• Implementation of functions

• Recursive functions

Page 4: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 4

Common Functions

#include <math.h>– sin(x) // radians– cos(x) // radians– tan(x) // radians– atan(x) – atan2(y,x)– exp(x) // ex

– log(x) // loge x

– log10(x) // log10 x

– sqrt(x) // x 0– pow(x, y) // xy

– ...

#include <stdio.h>– printf()– fprintf()– scanf()– sscanf()– ...

#include <string.h>– strcpy()– strcat()– strcmp()– strlen()– ...

Page 5: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 5

Common Functions (continued)

• See also the man pages of your system for things like

•<pthread.h> // concurrent execution•<socket.h> // network communications•... // many, many other facilities

• Fundamental Rule: if there is a chance that someone else had same problem as you, …

• … there is probably a package of functions to solve it!

Page 6: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 6

Functions in C

resultType functionName(type1 param1, type2 param2, …) {

body

}

• If no result, resultType should be void• Warning if not!

• If no parameters, use void between ()

Page 7: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 7

Functions in C

resultType functionName(type1 param1, type2 param2, …) {

body

} // functionName

• If no result, resultType should be void• Warning if not!

• If no parameters, use void between ()

It is good style to always

end a function with a

comment showing its name

Page 8: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 8

Using Functions

• Let int f(double x, int a) be (the

beginning of) a declaration of a function.

• Then f(expr1, expr2) can be used in any expression where a value of type int can be used – e.g.,

N = f(pi*pow(r,2), b+c) + d;

Page 9: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 9

• Let int f(double x, int a) be (the

beginning of) a declaration of a function.

• Then f(expr1, expr2) can be used in any expression where a value of type int can be used – e.g.,

N = f(pi*pow(r,2), b+c) + d;

Using Functions (continued)This is a parameter

This is an argumentThis is also an argument

Page 10: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 10

Definitions

• Parameter:– a declaration of an identifier within the '()' of a function declaration

• Used within the body of the function as a variable of that function

• Initialized to the value of the corresponding argument.

• Argument:– an expression passed when a function is called; becomes the initial value of the corresponding parameter

Page 11: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 11

• Let int f(double x, int a) be (the

beginning of) a declaration of a function.

• Then f(expr1, expr2) can be used in any expression where a value of type int can be used – e.g.,

N = f(pi*pow(r,2), b+c) + d;

Using Functions (continued)

The first argument expression is

evaluated, converted to double,

and assigned to parameter x

The second argument expression

is evaluated, converted to int,

and assigned to parameter a

Page 12: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 12

• Let int f(double x, int a) be (the

beginning of) a declaration of a function.

• Then f(expr1, expr2) can be used in any expression where a value of type int can be used – e.g.,

N = f(pi*pow(r,2), b+c) + d;

Using Functions (continued)

Function f is executed and returns a value of type int

Result of f is added to dSum is assigned to N

Page 13: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 13

Questions?

Page 14: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 14

Function Definition

• Every function definition has the formreturn-type function-name (parameter declarations) {

definitions and statements

}

• For practical purposes, code between {} (inclusive) is a compound statement

Page 15: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 15

Note

• Functions in C do not allow other functions to be declared within them

• Like C++, Java• Unlike Algol, Pascal

• All functions defined at “top level” of C programs

• (Usually) visible to linker• Can be linked by any other program that knows the

function prototype

Page 16: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 16

Examples

• double sin(double radians) {…

} // sin

• unsigned int strlen (char *s) {…

} // strlen

Page 17: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 17

Note on printf, etc.

• int printf(char *s, ...) {body

} // printf

• In this function header, “…” is not a professor’s place-holder

• (as often used in these slides)

• …but an actual sequence of three dots (no spaces between)

• Meaning:– the number and types of arguments is indeterminate

• Use <stdarg.h> to extract the arguments

Page 18: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 18

Questions?

Page 19: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 19

Function Prototypes

• There are many, many situations in which a function must be used separate from where it is defined –

• before its definition in the same C program

• In one or more completely separate C programs

• This is actually the normal case!

• Therefore, we need some way to declare a function separate from defining its body.

• Called a Function Prototype

Page 20: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 20

Function Prototypes (continued)

• Definition:– a Function Prototype is a language construct in C with the form:–

return-type function-name (parameter declarations) ;

Page 21: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 21

Function Prototypes (continued)

• Definition:– a Function Prototype is a language construct in C with the form:–

return-type function-name (parameter declarations) ;

• I.e., exactly like a function definition, except with a ';' instead of a body in curly brackets

Page 22: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 22

Purposes of Function Prototype

• So compiler knows how to compile calls to that function, i.e.,– number and types of arguments– type of result

• As part of a “contract” between developer and programmer who uses the function

• As part of hiding details of how it works and exposing what it does.

• A function serves as a “black box.”

Page 23: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 23

Header files

• In applications with multiple C programs, function prototypes are typically provided in header files

• I.e., the ‘.h’ files that programmers include in their code

• Grouped by related functions and features• To make it easier for developers to understand

• To make it easier for team development

• To make a package that can be used by someone else

Page 24: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 24

#include

• #include <foo.h>• Search the system’s directories in order for a file of

the name foo.h• Directories can be added with ‘-I’ switch to gcc

command– E.g., gcc –I myProject/include foo.c– Precedes system directories in search order

• #include "foo.h"• Search the directory where the source program is

found first, before -I and system directories

Page 25: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 25

Typical C Programming Style

• A lot of small C programs, rather than a few large ones

• Header files to tie them together

• Makefiles to build or rebuild them in an organized way

Page 26: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 26

Definition – Stub

• A stub is a dummy implementation of a function with an empty body

• A placeholder while building a program• So that it compiles correctly

• Fill in one-stub at a time• Compile and test if possible

Page 27: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 27

Questions?

Page 28: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 28

“Contract” between Developer and User of a Function

1. Function Prototype

2. The pre- and post-conditions– I.e., assertions about what is true before the

function is called and what is true after it returns.

– A logical way of explaining what the function does

Page 29: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 29

Definitions

• Pre-condition:–a characterization or logical statement about

• the values of the parameters, and • values of relevant variables outside the function

prior to calling the function

• Post-condition:–a logical statement or characterization about

• the result of the function in relation to the values of the parameters and pre-conditions, and

• changes to values of variables outside the function

after the function returns

Page 30: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 30

Example 1

• double sin (double angle);– Pre:– angle is expressed in radians– Post:– result is the familiar sine of angle– Note: this function does not use or change any

other variables

Page 31: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 31

Example 2

• int printf (string, arg1, arg2, …)– Pre:– string terminated with '\0' and containing

conversion specifiers

– Pre:– a buffer maintained by the file system contains zero or more unprinted characters from previous calls.

– Post:– args are substituted for conversion codes in copy of string; resulting string is added to buffer

– Post:– if '\n' is anywhere in buffer, line is “printed” up to '\n'; printed characters are cleared from buffer

– Post:– result is number of characters added to buffer by printf

Page 32: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 32

Example 3

/*Pre: fahrenheit valuePost:Celsius value*/double f2c(double fahrenheit){

double celsius = 5.0/9.0 * (fahrenheit-32);return celsius;

}

Page 33: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 33

Important

• Pre- and post-conditions are analogous to loop invariants

• I.e., they describe something about the data before and after a function is called and the relationship that the function preserves

• Often are used together with loop invariants• … to show that loop invariant is preserved from one

iteration to the next

Page 34: Introduction to Functions

Introduction to FunctionsCIS 1057 Fall 2013 34

Questions?