1 / 31

Introduction to Functions

Introduction to Functions. CS-2301, System Programming for Non-majors (Slides include materials from The C Programming Language , 2 nd ed., by Kernighan and Ritchie and from C: How to Program , 5 th ed., by Deitel and Deitel). CS-2301 B-term 2008. 1. Definition – Function.

tnicholas
Télécharger la présentation

Introduction to Functions

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introduction to Functions CS-2301, System Programming for Non-majors (Slides include materials from The C Programming Language, 2nd ed., by Kernighan and Ritchie and from C: How to Program, 5th ed., by Deitel and Deitel) CS-2301 B-term 2008 Introduction to Functions 1

  2. Definition – Function A fragment of code that accepts zero or more argument values and produces a resultvalue and 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 2008 Introduction to Functions 2

  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 CS-2301 B-term 2008 Introduction to Functions 3

  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) // logex log10(x) // log10x sqrt(x) // x  0 pow(x, y) // xy ... #include <stdio.h> printf() fprintf() scanf() sscanf() ... #include <string.h> strcpy() strcat() strcmp() strlen() ... CS-2301 B-term 2008 Introduction to Functions 4

  5. 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 2008 Introduction to Functions 5

  6. 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 2008 Introduction to Functions 6

  7. Functions in C resultType functionName(argType1arg1, argType2arg2, …) { … body … } If no result, resultType should be void Warning if not! If no arguments, use void between () CS-2301 B-term 2008 Introduction to Functions 7

  8. Functions in C resultType functionName(argType1arg1, argType2arg2, …) { … body … } // functionName If no result, resultType should be void Warning if not! If no arguments, use void between () It is good style to always end a function with a comment showing its name CS-2301 B-term 2008 Introduction to Functions 8

  9. Function Definition Every function definition has the form return-type function-name (argument declarations){ declarations and statements } See top of page 70 in Kernighan & Ritchie CS-2301 B-term 2008 Introduction to Functions 9

  10. Function Definition Every function definition has the form return-type function-name (argument declarations){ declarations and statements } See top of page 70 in Kernighan & Ritchie For practical purposes, code between {} (inclusive) is a compound statement CS-2301 B-term 2008 Introduction to Functions 10

  11. 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 Functions

  12. Examples double sin(double radians) { …} // sin unsigned int strlen (char *s) { …} // strlen CS-2301 B-term 2008 Introduction to Functions 12

  13. 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 2008 Introduction to Functions 13

  14. Questions? CS-2301 B-term 2008 Introduction to Functions 14

  15. 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 2008 Introduction to Functions 15

  16. Function Prototypes (continued) Definition:– a Function Prototype is a language construct in C with the form:– return-type function-name (argument declarations) ; CS-2301 B-term 2008 Introduction to Functions 16

  17. Function Prototypes (continued) Definition:– a Function Prototype is a language construct in C with the form:– return-type function-name (argument declarations) ; I.e., exactly like a function definition, except with a “;” instead of a body in curly brackets CS-2301 B-term 2008 Introduction to Functions 17

  18. 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 2008 Introduction to Functions 18

  19. Header files • In applications with multiple C programs, function prototypes are typically 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 Functions

  20. #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 Functions

  21. 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 Introduction to Functions

  22. 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 Functions

  23. Questions? Introduction to Functions

  24. “Contract” between Developer and User of a Function Function Prototype 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 2008 Introduction to Functions 24

  25. Definitions Pre-condition:–a characterization or logical statement about the values of the arguments, 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 arguments and pre-conditions, and changes to values of variables outside the function after the function returns CS-2301 B-term 2008 Introduction to Functions Introduction to Functions 25

  26. 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 2008 Introduction to Functions Introduction to Functions 26

  27. Example 2 int printf (string, arg1, arg2, …) Pre:–string terminated with ‘\0’ and containing conversion codes 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 2008 Introduction to Functions Introduction to Functions 27

  28. 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 2008 Introduction to Functions Introduction to Functions 28

  29. 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 receivedtotal = totalprev + input, count = countprev + 1 CS-2301 B-term 2008 Introduction to Functions Introduction to Functions 29

  30. 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 2008 Introduction to Functions Introduction to Functions 30

  31. Questions? CS-2301 B-term 2008 Introduction to Functions Introduction to Functions 31

More Related