Помогите мне понять название этой функции. Код из UFS, часть исходного кода FreeBSD 8 - PullRequest
1 голос
/ 17 февраля 2011
 /*
  180  * Create a regular file
  181  */
  182 static int
  183 ufs_create(ap)
  184         struct vop_create_args /* {
  185                 struct vnode *a_dvp;
  186                 struct vnode **a_vpp;
  187                 struct componentname *a_cnp;
  188                 struct vattr *a_vap;
  189         } */ *ap;
  190 {
  191         int error;
  192 
  193         error =
  194             ufs_makeinode(MAKEIMODE(ap->a_vap->va_type, ap->a_vap->va_mode),
  195             ap->a_dvp, ap->a_vpp, ap->a_cnp);
  196         if (error)
  197                 return (error);
  198         return (0);
  199 }

Пожалуйста, помогите мне получить информацию из строки 182-189 ... это странно для меня .. Что означает название этой функции? (Я имею в виду, что такое возвращаемое значение, что такое входной параметр?) Спасибо всем.

Ответы [ 2 ]

7 голосов
/ 17 февраля 2011

Тип возвращаемого значения int, и он принимает один аргумент, struct vop_create_args* с именем ap. Это нотация K & R.

2 голосов
/ 17 февраля 2011

Это объявление функции в старом стиле (перед прототипом).Функция является локальной для текущей единицы перевода, возвращает int, ap - это параметр, который она принимает, и имеет тип:

struct vop_create_args *

Все остальные вещи - просто комментарии, предположительно повторяющие фактическое определение структуры, чтобы информация также сохранялась локально (чтобы ленивому кодировщику не приходилось искать ее, что несколько опасно, если фактические и локальные определения вышли из строя).

Это эквивалентно:

static int ufs_create (struct vop_create_args *ap) { ...
...