2011-01-26 2 views
1

Я просматривал исходный код для PolicyKit пакета в гнома, и я пришел через некоторый код на линии 568 из ./src/polkitgnomeauthenticationdialog.c, что мне нужно немного помочь сЧто означает следующая часть PolicyKit-gnome?

if (g_strv_length (dialog->priv->users) > 1) 

Это часть условного оператора который определит, какой диалог будет показан пользователю при запросе их аутентификации, введя свой пароль. Что мне нужно, так это то, что означает dialog->priv-.users. Я знаю, что это строка с завершающим символом NULL, так как это то, что работает g_strv_lngth, и я понимаю, что это связано с привилегированными пользователями, но синтаксис меня отбрасывает, в частности, ->. Быстрое объяснение этой линии было бы очень полезно.

Для справки, полное условное утверждение

label = gtk_label_new (NULL); 
    if (g_strv_length (dialog->priv->users) > 1) 
    { 
      gtk_label_set_markup (GTK_LABEL (label), 
           _("An application is attempting to perform an action that requires privileges. " 
            "Authentication as one of the users below is required to perform this action.")); 
    } 
    else 
    { 
     if (strcmp (g_get_user_name(), dialog->priv->users[0]) == 0) 
     { 
      gtk_label_set_markup (GTK_LABEL (label), 
           _("An application is attempting to perform an action that requires privileges. " 
            "Authentication is required to perform this action.")); 
     } 
     else 
     { 
      gtk_label_set_markup (GTK_LABEL (label), 
           _("An application is attempting to perform an action that requires privileges. " 
            "Authentication as the super user is required to perform this action.")); 
     } 
    } 

ответ

3

В C,

ptr->memb 

совершенно эквивалентна

(*ptr).memb 

Расширение,

dialog->priv->users 

такая же, как

(*(*dialog).priv).users 

dialog имеет тип PolkitGnomeAuthenticationDialog * и dialog->priv имеет тип PolkitGnomeAuthenticationDialogPrivate *: они оба указатели на структуры, следовательно, использование ->.

1

A '->' используется для разыменования указателя на структуру, в этом случае это означает «разыменовать указатель на диалог структуры и затем разыменовать указатель на struct priv», тем самым получая значение пользователей-членов структуры '

1

Обычно вы видите -> в C при доступе к полю данных элемента указателя на структуру. Это короткая рука обозначение для «разыменования указателя и доступ к этой области», так, например, если у меня есть:

struct Data* d 
(*d).dataitem; 
d->dataitem; 

Последние два элемента эквивалентны.

Вы можете найти определение указанного объекта here.

Смежные вопросы