C Programming
Functions
Structured Programming
● Keep the flow of control in a program as simple as possible.
● Use top-down design.
- Keep decomposing (also known as factoring) a problem into smaller problems until you have
a collection of small problems that you can easily solve.
Top-Down Design Using Functions
● C programs normally consist of a collection of user-defined functions.
- Each function solves one of the small problems obtained using top-down design.
- Functions call or invoke other functions as needed.
Function Definitions, Prototypes, and Calls
#include <stdio.h>
void prn_message(void); /* fct prototype */
/* tells the compiler that this */
/* function takes no arguments */
int main(void) /* and returns no value. */
prn_message(); /* fct invocation */
void prn_message(void) /* fct definition */
printf(“A message for you: “);
printf(“Have a nice day!\n”);
Form of a Function Definition
type function_name ( parameter type list )
declarations
statements
Some Terminology
Header: Everything before the first brace.
Body: Everything between the braces.
Type: Type of the value returned by the function.
Parameter List: A list of identifiers that provide information
for use within the body of the function.
Also called formal parameters.
The return Statement
● When a return statement is executed, program control is immediately passed back to the
calling environment.
• If an expression follows the keyword return, the value of the expression is returned to the
calling environment as well.
return;
return expression;
If There is No return
● Control is passed back to the calling environment when the closing brace of the body is
encountered.
• Known as “falling of the end.”
Exit Status and return Verus exit( )
● In main() either return expr;
or
exit(expr);
will return an integer value to the
operating system.
● In functions other than main(), the effects of return and exit are different.
Return expr Versus exit(expr)
● return expr returns the value of expr to the calling function.
● exit(expr) always causes the program to terminate and returns an exit status to the operating
system. The value in expr is the exit status.
Demo Program – Using a Function to Calculate the Minimum of 2 Values
#include <stdio.h>
int min(int a, int b);
int main(void) {
int j, k, m;
printf(“Input two integers: “); scanf(“%d%d”, &j, &k);
m = min(j, k);
printf(“\nOf the two values %d and %d, “
“the minimum is %d.\n\n”, j, k, m); return 0;
int min(int a, int b) {
if (a < b)
return a;
else
return b;
Function Prototypes
● A function prototype tells the compiler:
• The number and type of arguments that are to be passed to the function.
• The type of the value that is to be returned by the function.
● General Form of a Function Prototype
type function_name( parameter type list);
Examples of Function Prototypes
double sqrt(double);
● The parameter list is typically a comma-separated list of types. Identifiers are optional.
void f(char c, int i);
is equivalent to
void f(char, int);
The Keyword void
● void is used if:
• A function takes no arguments.
• If no value is returned by the function.
Function Invocation
● As we have seen, a function is invoked (or called) by writing its name and an appropriate list
of arguments within parentheses.
• The arguments must match in number and type the parameters in the parameter list of the
function definition.
Call-by-Value
● In C, all arguments are passed call-by-value.
• This means that each argument is evaluated, and its value is used in place of the
corresponding formal parameter in the called function.
Demonstration Program for Call-by-Value
#include <stdio.h>
int compute_sum(int n);
int main(void)
int n = 3, sum;
printf(“%d\n”, n);
sum = compute_sum(n);
printf(“%d\n”, n);
printf(“%d\n”, sum);
return 0;
int compute_sum(int n)
int sum = 0;
/* 3 is printed */
/* 3 is printed */
for (; n > 0; --n) /* in main(), n is unchanged */
sum += n;
printf(“%d\n”, n); /* 0 is printed */
return sum; }
Standard Style for Function Definition Order
#include <stdio.h> #include <stdlib.h>
list of function prototypes
int main(void)
. ..
int max(int a, int b)
. ..
int min(int a, int b)
. ..
void prn_random_numbers(int k)
. ..
“Alternate Style for Function Definition Order
#include <stdio.h> #include <stdlib.h>
int max(int a, int b)
. ..
int min(int a, int b)
. ..
void prn_random_numbers(int k)
. ..
int main(void)
. ..
Common Programming Errors
● If f() is a function and v is a variable, then the function call f(v) cannot change the value in the
variable v.
• A common error for beginners is assuming the the value in v can be changed by a function
call such as f(v).
Style
● Avoid naming functions you write with the same name as system functions.
• Example: read, write, print
● Minimize the number of return
statements in a given function.
● Use names for parameters that clearly identify their purpose.