Upload
hei
View
30
Download
0
Embed Size (px)
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
Citation preview
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)
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
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
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()– ...
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!
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 ()
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
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;
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
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
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
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
Introduction to FunctionsCIS 1057 Fall 2013 13
Questions?
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
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
Introduction to FunctionsCIS 1057 Fall 2013 16
Examples
• double sin(double radians) {…
} // sin
• unsigned int strlen (char *s) {…
} // strlen
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
Introduction to FunctionsCIS 1057 Fall 2013 18
Questions?
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
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) ;
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
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.”
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
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
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
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
Introduction to FunctionsCIS 1057 Fall 2013 27
Questions?
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
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
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
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
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;
}
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
Introduction to FunctionsCIS 1057 Fall 2013 34
Questions?