안녕하세요

#include<stdio.h>
int g=100;
int main(void)
{
    int g=10;
    printf(\"%d\\n\",g);
    printf(\"%d\\n\",a());
    printf(\"%d\\n\",a());

    return 0;
}

static int sg =200;

int a()
{
    static int s=10;

    return s++ + sg;

    return 0;
}
C언어 공부 하다가 위의 예제를 보고 출력 값을 예상해 보라고 하더라구요
전 이 코드가 에러가 난다고 생각했습니다.
첫째로 a함수의 프로토 타입이 없고요
둘째로 C는 절차지향언어로 알고 있는데 a함수에서 sg 라는 변수를 사용하잖아요
sg라는 변수는 main함수와 a함수 사이에 있는데 읽혀 지지가 않잖아요
메인함수에서 a함수를 호출하면 프로토타입 있는걸 확인하고 바로 a함수로 바로 가는거
아닌가요?
그리고 중간의 static sg 변수선언 부분을 주석 처리 하니까 에러가 나더라고요
아마 프로토타입이 없어서 그런거 같은데....
해석 좀 해주세요
부탁드립니다 ^^;