Подтвердить что ты не робот

Что означает подчеркивание в структуре typedef?

Я читал исходный код zmq и наткнулся на следующий typedef

typedef struct {unsigned char _ [32];} zmq_msg_t;

Я не понимаю, что означает подчеркивание в этом определении. Может кто-то, пожалуйста, пролить свет?

4b9b3361

Ответ 1

Подчеркивание (_) является допустимым идентификатором, в данном случае - именем члена структуры. Это не имеет никакого особого значения, как такового.

Цитата C11, глава §6.4.2.1, Идентификаторы

Идентификатор представляет собой последовательность недигитных символов (включая подчеркивание _, строчные и прописные латинские буквы и другие символы) и цифры, которые обозначают один или несколько объектов [....]

AFAIR, это верно в случае С++, также см. главу 2.11, С++ 14.

Ответ 2

Это ничего не значит, это просто имя члена структуры.

Это не самое коммуникативное имя, но оно, вероятно, было немного "секретным".

Идентификатор в основном должен соответствовать [A-Za-z_][A-Za-z_0-9]*, и это делает.

Ответ 3

В нескольких языках существует соглашение использовать идентификатор _ для переменных "не заботьтесь", которые не должны упоминаться. Например, вы можете написать в Схеме /Lisp

(let* ((x ...)
       (_ ...<some side effect depending on x>)
       (y ...<something making use of the side effect result>))
  ...)

В этом случае нет проблем с областью определения, так как вы можете переназначить _ столько раз, сколько хотите. В C/С++ это соглашение не все так работоспособно, так как чаще всего конфликтует несколько вариантов использования _. Нет необходимости игнорировать параметры, так как вы можете просто опустить их вообще:

int fun(int a, int, int b) { return a + b; }

Однако, поскольку единственная размерная замена в структуре (для которой она используется здесь), вы не можете опустить идентификатор, и вам понадобится только один идентификатор для пространства имен. Таким образом, в этом случае это соглашение работает. Но как идиоматический шаблон, он используется на других языках намного больше.

Ответ 4

Из cppreference, если у меня нет копии Стандарта:

Идентификатор представляет собой произвольно длинную последовательность цифр, подчеркивание, строчные и прописные латинские буквы и большинство символов Unicode

Таким образом, _ - это имя переменной. См. Также

Каковы правила использования подчеркивания в идентификаторе С++?

для справки об использовании символов подчеркивания в идентификаторах

Ответ 5

Одним словом? Ничего. _ является символом как любой другой и может использоваться для обозначения переменной...

Однако большинство программистов используют _ для замены пробелов в именах переменных... так что вы можете сделать что-то вроде этого:

 int my_darling_little_beloved_variable;