Jer*_*eng 20 c c++ typedef structure
我正在阅读zmq的源代码,并遇到了以下内容 typedef
typedef struct {unsigned char _ [32];} zmq_msg_t;
Run Code Online (Sandbox Code Playgroud)
我不明白下划线在这个定义中意味着什么.有人可以帮忙解决一些问题吗?
Sou*_*osh 32
underscore(_)是有效的标识符,在本例中是结构成员的名称.它没有任何特殊含义.
引用C11,章节§6.4.2.1,标识符
标识符是一系列非数字字符(包括下划线
_,小写和大写拉丁字母以及其他字符)和数字,用于指定一个或多个实体[...]
AFAIR,在C++的情况下也是如此,也参见2.11节,C++ 14.
unw*_*ind 19
它没有任何意义,它只是结构成员的名称.
它不是最具沟通性的名字,但它可能被选为有点"秘密".
标识符基本上必须匹配[A-Za-z_][A-Za-z_0-9]*,而这个标识符.
小智 12
在几种语言中,有一种约定使用标识符_"不关心"变量,这些变量不应被引用.例如,您可以使用Scheme/Lisp编写
(let* ((x ...)
(_ ...<some side effect depending on x>)
(y ...<something making use of the side effect's result>))
...)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,作用域没有问题,因为您可以_根据需要重新分配.在C/C++中,这个约定并不是那么可行,因为通常会有几种使用_冲突.忽略参数不是必需的,因为您可以完全省略它们:
int fun(int a, int, int b) { return a + b; }
Run Code Online (Sandbox Code Playgroud)
但是,作为结构中的唯一大小替代(此处使用它),您不能省略标识符,并且每个命名空间只需要一个标识符.所以在这种情况下,这个惯例就可以解决了.但作为惯用模式,它在其他语言中使用的更多.