here is some adjusted code to show the differences between where the variables are defined:
(from : What does "static" mean?)
#include <stdio.h>
//static int sa = 10;
void func1()
{
    int a = 10;
    static int sa = 10;
    a += 5;
    sa += 5;
    printf("func 1: a = %d, sa = %d\n", a, sa);
}
void func2()
{
    int a = 10;
    static int sa = 10;
    a += 5;
    sa += 5;
    printf(" func2 : a = %d, sa = %d\n", a, sa);
}
int main()
{
    int i,j;
    for (i = 0; i < 10; ++i){
        func1();
    }
    for (j = 0; j < 10; j++)
    {
        func2();
    }
}
produces:
func 1: a = 15, sa = 15
func 1: a = 15, sa = 20
func 1: a = 15, sa = 25
func 1: a = 15, sa = 30
func 1: a = 15, sa = 35
func 1: a = 15, sa = 40
func 1: a = 15, sa = 45
func 1: a = 15, sa = 50
func 1: a = 15, sa = 55
func 1: a = 15, sa = 60
 func2 : a = 15, sa = 15
 func2 : a = 15, sa = 20
 func2 : a = 15, sa = 25
 func2 : a = 15, sa = 30
 func2 : a = 15, sa = 35
 func2 : a = 15, sa = 40
 func2 : a = 15, sa = 45
 func2 : a = 15, sa = 50
 func2 : a = 15, sa = 55
 func2 : a = 15, sa = 60
while
#include <stdio.h>
static int sa = 10;
void func1()
{
    int a = 10;
//  static int sa = 10;
    a += 5;
    sa += 5;
    printf("func 1: a = %d, sa = %d\n", a, sa);
}
void func2()
{
    int a = 10;
    //static int sa = 10;
    a += 5;
    sa += 5;
    printf(" func2 : a = %d, sa = %d\n", a, sa);
}
produces
func 1: a = 15, sa = 15
func 1: a = 15, sa = 20
func 1: a = 15, sa = 25
func 1: a = 15, sa = 30
func 1: a = 15, sa = 35
func 1: a = 15, sa = 40
func 1: a = 15, sa = 45
func 1: a = 15, sa = 50
func 1: a = 15, sa = 55
func 1: a = 15, sa = 60
 func2 : a = 15, sa = 65
 func2 : a = 15, sa = 70
 func2 : a = 15, sa = 75
 func2 : a = 15, sa = 80
 func2 : a = 15, sa = 85
 func2 : a = 15, sa = 90
 func2 : a = 15, sa = 95
 func2 : a = 15, sa = 100
 func2 : a = 15, sa = 105
 func2 : a = 15, sa = 110
summary comments (from the original reference):
What does "static" mean?
- Static defined local variables do not lose their value between
function calls. In other words they are global variables, but scoped
to the local function they are defined in. 
- Static global variables are not visible outside of the C file they
 are defined in.
 
- Static functions are not visible outside of the C file they are
 defined in.