You are on page 1of 35

Introduction to Functions

CS-2301, System Programming


for Non-Majors
(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)

CS-2301, B-Term 2009 Introduction to Functions 1


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
CS-2301, B-Term 2009 Introduction to Functions 2
Functions – a big Topic

• Examples
• Function definition
• Function prototypes & Header files
• Pre- and post-conditions
• Scope and storage class
• Implementation of functions
• Recursive functions

CS-2301, B-Term 2009 Introduction to Functions 3


Common Functions
#include <math.h> #include <stdio.h>
– sin(x) // radians – printf()
– cos(x) // radians – fprintf()
– tan(x) // radians – scanf()
– atan(x) – sscanf()
– atan2(y,x) – ...
– exp(x) // ex #include <string.h>
– log(x) // loge x – strcpy()
– log10(x) // log10 x – strcat()
– sqrt(x) // x  0 – strcmp()
– pow(x, y) // xy – strlen()
– ... – ...
CS-2301, B-Term 2009 Introduction to Functions 4
Common Functions (continued)

• In Kernighan & Ritchie


– <assert.h> // for diagnostics, loop invariants, etc.
– <stdarg.h> // for parsing arguments
– <time.h> // time of day and elapsed time
– <limits.h> // implementation dependent numbers
– <float.h> // implementation dependent numbers.

– <setjmp.h> // beyond scope of this course


– <signal.h> // beyond scope of this course

CS-2301, B-Term 2009 Introduction to Functions 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!
CS-2301, B-Term 2009 Introduction to Functions 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 ()
CS-2301, B-Term 2009 Introduction to Functions 7
Functions in C

resultType functionName(type1 param1, type2


param2, …) {
… a ys
to a l w
body s t yl e
i s g ood i tha
I t c tio n w ame
fu n i t s n
… en d a ts h o w in g
m e n
} // functionName com
• If no result, resultType should be void
• Warning if not!
• If no parameters, use void between ()
CS-2301, B-Term 2009 Introduction to Functions 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;

CS-2301, B-Term 2009 Introduction to Functions 9


Using Functions (continued)
This is a parameter

• 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;
This is also an
This is an argument
argument
CS-2301, B-Term 2009 Introduction to Functions 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
CS-2301, B-Term 2009 Introduction to Functions 11
Using Functions (continued)

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


The he
t
is e secof)
ev firsbeginning
v on
a declaration of a function.
a lu a d
and ated anrgdumaluate argu
ass , co asseingt d, co men
ign nve neexp nv t ex
• Then
ed d
ted troess 1e,rtedexpr
to p rf(expr pre 2) can be used in any
s
ara to dopairoanmis to in sion
expressionme where a value of type int can
ter ble, eter a t,
u
be used – e.g., x

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

CS-2301, B-Term 2009 Introduction to Functions 12


Using Functions (continued)

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

Function f is executed and


Sum is assigned to N Result of f is added to d
returns a value of type int
CS-2301, B-Term 2009 Introduction to Functions 13
Questions?

CS-2301, B-Term 2009 Introduction to Functions 14


Function Definition

• Every function definition has the form


return-type function-name (parameter declarations) {
definitions and statements
}

• See top of page 70 in Kernighan & Ritchie

• For practical purposes, code between {}


(inclusive) is a compound statement

CS-2301, B-Term 2009 Introduction to Functions 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

CS-2301, B-Term 2009 Introduction to Functions 16


Examples
• double sin(double radians) {

} // sin

• unsigned int strlen (char *s) {



} // strlen

CS-2301, B-Term 2009 Introduction to Functions 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
CS-2301, B-Term 2009 Introduction to Functions 18
Questions?

CS-2301, B-Term 2009 Introduction to Functions 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
CS-2301, B-Term 2009 Introduction to Functions 20
Function Prototypes (continued)

• Definition:– a Function Prototype in C is a


language construct of 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

CS-2301, B-Term 2009 Introduction to Functions 21


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


CS-2301, B-Term 2009 Introduction to Functions 22
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
CS-2301, B-Term 2009 Introduction to Functions 23
#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
CS-2301, B-Term 2009 Introduction to Functions 24
Typical C Programming Style

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


large ones
• Each .c file contains closely related functions
• Usually a small number of functions

• Header files to tie them together

• Makefiles to build or rebuild them in an


organized way
• Later in the term
CS-2301, B-Term 2009 Introduction to Functions 25
Definition – Stub

• A stub is a dummy implementation of a


function with an empty body

• A placeholder while building (other parts of)


a program
• So that it compiles correctly

• Fill in one-stub at a time


• Compile and test if possible
CS-2301, B-Term 2009 Introduction to Functions 26
Questions?

CS-2301, B-Term 2009 Introduction to Functions 27


“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

CS-2301, B-Term 2009 Introduction to Functions 28


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
CS-2301, B-Term 2009 Introduction to Functions 29
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

CS-2301, B-Term 2009 Introduction to Functions 30


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
CS-2301, B-Term 2009 Introduction to Functions 31
Example 3
float total = 0;
int count = 0;

int GetNewItem(void) {
float input;
int rc;
printf("Enter next item:- ");
if ((rc = scanf("%f", &input)) != EOF
&& (rc > 0)) {
total += input;
count++;
}; // if
return rc;
} // GetNewItem

CS-2301, B-Term 2009 Introduction to Functions 32


Example 3
Pre:– total is sum of all
float total = 0;
previous inputs, or zero if none
int count = 0;
Pre:– count is number of
previous inputs, or zero if none
int GetItem(void) {
float input; Post:– if valid input is received
int rc; total = totalprev + input,
...; count = countprev + 1
if ((rc = scanf(“%f”, &input)) != EOF
&& (rc > 0)) {
total += input;
count++;
}; // if
return rc;
} // GetItem

CS-2301, B-Term 2009 Introduction to Functions 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

CS-2301, B-Term 2009 Introduction to Functions 34


Questions?

CS-2301, B-Term 2009 Introduction to Functions 35

You might also like