关于定义:从Go代码到C的重写算法

Currently translating weighted DAG to C code which is written in Go language and topologically sorted. Actually I missed one part of the code that is the function below sample. I couldn't get what "visit" declaration is. Is it function declaration within another function ? If you explain in C syntax that would be great.

func (g *graph) topoSort() []int {
    result := make([]int, g.size())
    marks := make([]bool, g.size())
    resultIndex := g.size() - 1

    var visit func(int)
    visit = func(u int) {
        for _, item := range g.adjList[u] {
            if !marks[item.vertex] {
                visit(item.vertex)
            }
        }

        marks[u] = true
        result[resultIndex] = u
        resultIndex--
    }

    for u := range g.adjList {
        if !marks[u] {
            visit(u)
        }
    }

    return result
}

Yes, it's a local function definition, and it closes over marks, which makes it not worth translating directly. You can transform it to an ordinary static function if you also change it to take marks as an argument.