下划线在typedef结构中意味着什么?

时间:2017-02-16 13:37:26

标签: c++ c structure typedef

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

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

我不明白下划线在此定义中的含义。请有人帮忙解决一些问题吗?

5 个答案:

答案 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;