Об определении: алгоритм перезаписи с кода Go на C - PullRequest
0 голосов
/ 03 мая 2019

В настоящее время переводится взвешенный код DAG на C, написанный на языке Go и топологически отсортированный.На самом деле я пропустил одну часть кода, которая является функцией ниже образца.Я не мог понять, что такое декларация о посещении.Это объявление функции в другой функции?Если вы объясните синтаксис Си, это было бы здорово.

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
}

1 Ответ

1 голос
/ 03 мая 2019

Да, это определение локальной функции, и оно закрывается за marks, что делает его не заслуживающим прямого перевода.Вы можете преобразовать его в обычную статическую функцию, если вы также измените его на marks в качестве аргумента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...