我正在阅读zmq的源代码,并遇到了以下typedef
typedef struct {unsigned char _ [32];} zmq_msg_t;
我不明白下划线在此定义中的含义。请有人帮忙解决一些问题吗?
答案 0 :(得分:32)
下划线(_
)是有效的标识符,在本例中是结构成员的名称。它本身没有任何特殊含义。
引用C11
,章节§6.4.2.1,标识符
标识符是一系列非数字字符(包括下划线
_
,. 指定的小写和大写拉丁字母,以及其他字符和数字 一个或多个实体[....]
AFAIR,在C ++的情况下也是如此,参见2.11节,C ++ 14。
答案 1 :(得分:19)
它并不意味着什么,它只是结构成员的名字。
它不是最具沟通性的名字,但它可能被选为有点秘密"。
标识符基本上必须匹配[A-Za-z_][A-Za-z_0-9]*
,而且这个标识符匹配。
答案 2 :(得分:12)
在几种语言中,有一种约定使用标识符_
来表示"不关心"不应该引用的变量。例如,您可以使用Scheme / Lisp
(let* ((x ...)
(_ ...<some side effect depending on x>)
(y ...<something making use of the side effect's result>))
...)
在这种情况下,确定范围没有问题,因为您可以根据需要随时重新分配_
。在C / C ++中,这个约定并不是那么可行,因为_
的几个用法往往会发生冲突。忽略参数不是必需的,因为您可以完全省略它们:
int fun(int a, int, int b) { return a + b; }
但是,作为结构中的唯一大小替代(此处使用它),您不能省略标识符,并且每个命名空间只需要一个标识符。所以在这种情况下,这个惯例就可以解决了。但作为惯用模式,它在其他语言中使用的更多。
答案 3 :(得分:3)
从cppreference,由于我没有标准副本:
标识符是一个任意长的数字序列,下划线, 小写和大写拉丁字母,以及大多数Unicode字符
因此,_
是变量名。另见
What are the rules about using an underscore in a C++ identifier?
有关在标识符中使用下划线的参考
答案 4 :(得分:1)
总之一句话?没有。 _是任何其他字符,可用于命名变量...
但是,大多数程序员使用_来替换变量名中的空格......所以,你可以这样做:
int my_darling_little_beloved_variable;