Download presentation
Presentation is loading. Please wait.
1
Introduction to FunctionsCS-2301 D-term 20091 Introduction to Functions CS-2301 System Programming C-term 2009 (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)
2
Introduction to FunctionsCS-2301 D-term 20092 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
3
Introduction to FunctionsCS-2301 D-term 20093 Functions – a big Topic Examples Function definition Function prototypes & Header files Pre- and post-conditions Scope and storage class Implementation of functions Recursive functions
4
Introduction to FunctionsCS-2301 D-term 20094 Common Functions #include –sin(x) // radians –cos(x) // radians –tan(x) // radians –atan(x) –atan2(y,x) –exp(x) // e x –log(x) // log e x –log10(x) // log 10 x –sqrt(x) // x 0 –pow(x, y) // x y –... #include –printf() –fprintf() –scanf() –sscanf() –... #include –strcpy() –strcat() –strcmp() –strlen() –...
5
Introduction to FunctionsCS-2301 D-term 20095 Common Functions (continued) In Kernighan & Ritchie – // for diagnostics, loop invariants, etc. – // for parsing arguments – // time of day and elapsed time – // implementation dependent numbers – // implementation dependent numbers. – // beyond scope of this course
6
Introduction to FunctionsCS-2301 D-term 20096 Common Functions (continued) See also the man pages of your system for things like // concurrent execution // 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!
7
Introduction to FunctionsCS-2301 D-term 20097 Functions in C resultType functionName( type 1 param1, type 2 param2, …) { … body … } If no result, resultType should be void Warning if not! If no parameters, use void between ()
8
Introduction to FunctionsCS-2301 D-term 20098 Functions in C resultType functionName( type 1 param1, type 2 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
9
Introduction to FunctionsCS-2301 D-term 20099 Using Functions Let int f(double x, int a) be (the beginning of) a declaration of a function. Then f(expr 1, expr 2 ) 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;
10
Introduction to FunctionsCS-2301 D-term 200910 Let int f(double x, int a) be (the beginning of) a declaration of a function. Then f(expr 1, expr 2 ) 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 argument This is also an argument
11
Introduction to FunctionsCS-2301 D-term 200911 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
12
Introduction to FunctionsCS-2301 D-term 200912 Let int f(double x, int a) be (the beginning of) a declaration of a function. Then f(expr 1, expr 2 ) 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
13
Introduction to FunctionsCS-2301 D-term 200913 Let int f(double x, int a) be (the beginning of) a declaration of a function. Then f(expr 1, expr 2 ) 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 d Sum is assigned to N
14
Introduction to FunctionsCS-2301 D-term 200914 Questions?
15
Introduction to FunctionsCS-2301 D-term 200915 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
16
Introduction to FunctionsCS-2301 D-term 200916 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
17
Introduction to FunctionsCS-2301 D-term 200917 Examples double sin(double radians) { … }//sin unsigned int strlen (char *s) { … }//strlen
18
Introduction to FunctionsCS-2301 D-term 200918 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 to extract the arguments
19
Introduction to FunctionsCS-2301 D-term 200919 Questions?
20
Introduction to FunctionsCS-2301 D-term 200920 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
21
Introduction to FunctionsCS-2301 D-term 200921 Function Prototypes (continued) Definition:– a Function Prototype is a language construct in C with the form:– return-type function-name (parameter declarations) ;
22
Introduction to FunctionsCS-2301 D-term 200922 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
23
Introduction to FunctionsCS-2301 D-term 200923 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.”
24
Introduction to FunctionsCS-2301 D-term 200924 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
25
Introduction to FunctionsCS-2301 D-term 200925 #include 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
26
Introduction to FunctionsCS-2301 D-term 200926 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 Later in the term
27
Introduction to FunctionsCS-2301 D-term 200927 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
28
Introduction to FunctionsCS-2301 D-term 200928 Questions?
29
Introduction to FunctionsCS-2301 D-term 200929 “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
30
Introduction to FunctionsCS-2301 D-term 200930 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
31
Introduction to FunctionsCS-2301 D-term 200931 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
32
Introduction to FunctionsCS-2301 D-term 200932 Example 2 int printf (string, arg 1, arg 2, …) –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
33
Introduction to FunctionsCS-2301 D-term 200933 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
34
Introduction to FunctionsCS-2301 D-term 200934 Example 3 float total = 0; int count = 0; int GetItem(void) { float input; int rc;...; if ((rc = scanf(“%f”, &input)) != EOF && (rc > 0)) { total += input; count++; };// if return rc; }// GetItem Pre:– total is sum of all previous inputs, or zero if none Pre:– count is number of previous inputs, or zero if none Post:– if valid input is received total = total prev + input, count = count prev + 1
35
Introduction to FunctionsCS-2301 D-term 200935 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
36
Introduction to FunctionsCS-2301 D-term 200936 Questions?
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.