Статические функции в драйвере устройства Linux?

Без выборочных данных, я думаю, что возможное решение может быть:

создать некоторые выборочные данные

library( sf)
#square of 2 x 2
pol = st_polygon(list(rbind(c(0,0), c(2,0), c(2,2), c(0,2), c(0,0))))
#add two more squares of 2 x 2
b = st_sfc(pol, pol + c(.8, .2), pol + c(4, .8))

plot(b)

enter image description here [ 113]

рассчитать площадь перекрытия

l <- lapply( b, function(x) { 
       lapply(b, function(y) st_intersection( x, y ) %>% st_area() ) 
     })

matrix(unlist(l), ncol = length(b), byrow = TRUE)
#      [,1] [,2] [,3]
# [1,] 4.00 2.16    0
# [2,] 2.16 4.00    0
# [3,] 0.00 0.00    4

рассчитать процент перекрытия

l2 <- lapply( b, function(x) { 
  lapply(b, function(y) st_intersection( x, y ) %>% st_area() * 100 /sqrt( st_area(x) * st_area(y) ) ) 
})

matrix(unlist(l2), ncol = length(b), byrow = TRUE)
#      [,1] [,2] [,3]
# [1,]  100   54    0
# [2,]   54  100    0
# [3,]    0    0  100

10
задан VividD 30 December 2014 в 16:34
поделиться

2 ответа

Функции, объявленные статичными, не видимы вне единицы перевода, они определяются в (единица перевода является в основном.c файлом). Если функция не должна быть вызвана снаружи файла, то это должно быть сделано статичным, чтобы не загрязнить глобальное пространство имен. Это делает конфликты между именами, которые являются тем же, менее вероятно, произойдут. Экспортируемые символы обычно indentified со своего рода тегом подсистемы, который далее уменьшает объем для конфликта.

Часто, указатели на эти функции заканчиваются в структурах, таким образом, их на самом деле называют снаружи файла, они определяются в, но не их именем функции.

17
ответ дан 3 December 2019 в 18:36
поделиться

По тем же причинам Вы используете статичный в любом коде. Необходимо только 'опубликовать' вызовы API, что-либо еще открывает Вас для злоупотребления, такие как способность вызвать внутренние функции снаружи драйвера, что-то, что почти наверняка было бы катастрофически.

Это - хорошая практика программирования, чтобы только сделать видимым к внешнему миру, что необходимо. Это - то, о чем инкапсуляция - все.

2
ответ дан 3 December 2019 в 18:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: