Что означает инициализация с префиксом struct? - PullRequest
0 голосов
/ 14 января 2020

Я читал некоторый код и наткнулся на следующее утверждение:

 struct sockaddr_in server

Я понимаю, что sockaddr_in - это некоторый предопределенный struct, но почему мы ставим struct в качестве префикса? Также показано ниже, аналогичная попытка

enter image description here

Не могу просто написать:

sockaddr_in server

Ответы [ 2 ]

5 голосов
/ 14 января 2020

Синтаксис языка C требует, чтобы объявление переменной типа struct содержало ключевое слово struct перед типом.

В то время как C ++ разрешает это ключевое слово, которое будет пропущено, C нет.

1 голос
/ 14 января 2020

В C существует такое понятие, как тег структуры, объединения или перечисления. Соответственно, идентификатор может обозначать тег. Чтобы отличить guish такой идентификатор от идентификатора других идентификаторов переменных, которые обозначают теги, используются вместе с ключевыми словами struct, union и enum.

Например, рассмотрим следующую демонстрационную программу.

#include <stdio.h>

int main(void) 
{
    struct x
    {
        int x;
    } x = { 10 };

    printf( "x.x = %d\n", x.x );

    return 0;
}

Выходные данные:

x.x = 10

Здесь то же имя x используется для обозначения тега структуры, члена структуры и переменной типа структуры.

В C ++ термин «имя класса» используется так же, как и имя любой другой сущности. В C ++ есть пространства имен, которые позволяют размещать объекты с одинаковыми именами в разных пространствах имен, чтобы избежать коллизий.

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