C++ 下划线在typedef结构中是什么意思?

C++ 下划线在typedef结构中是什么意思?,c++,c,structure,typedef,C++,C,Structure,Typedef,我在阅读zmq的源代码时,遇到了以下typedef typedef struct {unsigned char _ [32];} zmq_msg_t; 我不明白下划线在这个定义中是什么意思。有人能帮忙解释一下吗?下划线(\u)是一个有效的标识符,在本例中是结构成员的名称。它本身没有任何特殊意义 引用C11,第§6.4.2.1章,标识符 标识符是一个非数字字符序列(包括下划线\uuu,即 小写和大写拉丁字母(以及其他字符)和数字,表示 一个或多个实体[……] AFAIR,在C++的情况下也是如

我在阅读zmq的源代码时,遇到了以下
typedef

typedef struct {unsigned char _ [32];} zmq_msg_t;
我不明白下划线在这个定义中是什么意思。有人能帮忙解释一下吗?

下划线(
\u
)是一个有效的标识符,在本例中是结构成员的名称。它本身没有任何特殊意义

引用
C11
,第§6.4.2.1章,标识符

标识符是一个非数字字符序列(包括下划线
\uuu
,即 小写和大写拉丁字母(以及其他字符)和数字,表示 一个或多个实体[……]


AFAIR,在C++的情况下也是如此,也参考第2.11章,C++ 14。< /P> < P>这并不意味着什么,它只是结构成员的名字。< /P> 这不是最容易沟通的名字,但它可能被选为有点“秘密”


标识符基本上必须与
[A-Za-z_u][A-Za-z_u0-9]*
匹配,而此标识符确实匹配。

来自cppreference,因为我没有标准的副本:

标识符是任意长的数字序列,下划线, 小写和大写拉丁字母,以及大多数Unicode字符

因此,
是一个变量名。另见


有关在一个单词中使用标识符中的下划线的参考信息

?没什么与任何其他字符一样是一个字符,可用于命名变量

然而,大多数程序员使用u替换变量名中的空格。。。因此,您可以这样做:


int my\u darling\u little\u心爱的\u变量

在几种语言中,有一种惯例,即对不应该被引用的“不在乎”变量使用标识符。例如,您可以使用Scheme/Lisp编写

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

但是,作为结构中唯一的大小替换(这里使用它),您不能省略标识符,并且每个名称空间只需要一个标识符。所以在这种情况下,这个惯例是可行的。但作为一种惯用模式,它在其他语言中使用得更多。

它只是一个变量名。注意:C11 7.1.3保留标识符:“……所有以下划线开头的标识符始终保留为在普通和标记名空间中都具有文件作用域的标识符。”这里的
\uuu
是一个字段名,因此似乎没有违反此规定。@chux名称空间在6.2中定义。3@OrangeDog不幸的是,这个问题被标记为C和C++。这很可能是一种不公开声明可用消息格式的方法,同时保证消息本身的长度正好为32字节。
\uuu
是一个字段名。在OP的代码中,这不是变量。@ CUX:如果你必须去达到那种程度的迂腐,你必须选择一些其他的术语,而不是“field”,因为C++和C都不定义这个术语。这是虚构的。就我个人而言,我认为“变量”很好;“成员变量”通俗地说是可以接受的。您要寻找的真正术语是“数据成员”。@LightnessRacesinOrbit不同意“字段”的弱点。数据成员更好。BTW字段不是由我组成的,只是C++中数据记录的子部分的一个术语:在C++的上下文中,它是由以下组成的)如果您要点菜的话,我更喜欢我的,也许可以配一盘?
int fun(int a, int, int b) { return a + b; }