A function can return a computed value to the caller.

return `return` sends a value back to the caller and exits the function.
caller The caller stores or uses the returned value.

Return Values

input
return_values.c
Replay: real traced execution (multi-file project)
#include <stdio.h>

int clamp(int value, int max) {
    if (value > max) {
        return max;
    }
    return value;
}

int main(void) {
    int input = 12;
    int result = clamp(input, 10);

    printf("result=%d\n", result);
    return 0;
}
#include <stdio.h>

int clamp(int value, int max) {
    if (value > max) {
        return max;
    }
    return value;
}

int main(void) {
    int input = 7;
    int result = clamp(input, 10);

    printf("result=%d\n", result);
    return 0;
}
#include <stdio.h>

int clamp(int value, int max) {
    if (value > max) {
        return max;
    }
    return value;
}

int main(void) {
    int input = 20;
    int result = clamp(input, 10);

    printf("result=%d\n", result);
    return 0;
}
  1. input ← 12

    10int main(void) {11    int input→ 12 = 12; //@input=7, 2012    int result = clamp(input12, 10);
  2. int clamp(int value, int max)

    3int clamp(int value12, int max10) {4    if (value > max) {
  3. if (value > max)

    3int clamp(int value, int max) {4    if (value12 > max10) {5        return max10;6    }
  4. result ← 10

    11    int input = 12; //@input=7, 2012    int result→ 10 = clamp(input12, 10);1314    printf("result=%d\n", result10);15    return 0;16}
    outputresult=10
  1. input ← 7

    10int main(void) {11    int input→ 7 = 7;12    int result = clamp(input7, 10);
  2. int clamp(int value, int max)

    3int clamp(int value7, int max10) {4    if (value > max) {5        return max;6    }7    return value7;8}
  3. result ← 7

    11    int input = 7;12    int result→ 7 = clamp(input7, 10);1314    printf("result=%d\n", result7);15    return 0;16}
    outputresult=7
  1. input ← 20

    10int main(void) {11    int input→ 20 = 20;12    int result = clamp(input20, 10);
  2. int clamp(int value, int max)

    3int clamp(int value20, int max10) {4    if (value > max) {
  3. if (value > max)

    3int clamp(int value, int max) {4    if (value20 > max10) {5        return max10;6    }
  4. result ← 10

    11    int input = 20;12    int result→ 10 = clamp(input20, 10);1314    printf("result=%d\n", result10);15    return 0;16}
    outputresult=10

Follow the Return

  1. input starts as 12.
  2. clamp(input, 10) passes 12 and the maximum 10.
  3. Inside clamp, 12 > 10 is true.
  4. The function returns 10.
  5. result stores that return value, so the program prints result=10. | input | max | returned result | | --- | --- | --- | | 12 | 10 | 10 | | 7 | 10 | 7 | | 20 | 10 | 10 |

Exercise: return_values.c

Reproduce result=10, then use the pinned input variants 7 and 20 to predict result=7 and result=10.