在c typedef中,变量名不应该在括号后面吗?

时间:2017-11-04 16:57:19

标签: c++ typedef

在下面的代码中,我不明白为什么BMP2()在括号内,为什么其中的字段是这样编写的:

typedef struct BMP2
{
  unsigned long biSize;
  unsigned long biWidth;
  unsigned long biHeight;
  unsigned short biPlanes;
  unsigned short biBitCount;
  unsigned long biCompression;
  unsigned long biSizeImage;
  unsigned long biXPelsPerMeter;
  unsigned long biYPelsPerMeter;
  unsigned long biClrUsed;
  unsigned long biClrImportant;
  BMP2()
  {
    biWidth
    = biHeight
    = biCompression
    = biSizeImage
    = biXPelsPerMeter
    = biYPelsPerMeter
    = biClrUsed
    = biClrImportant = 0;
    biSize = sizeof(BMP2);
    biPlanes = biBitCount
    = 0;
  }
};

4 个答案:

答案 0 :(得分:0)

biWidth = biHeight = biCompression = biSizeImage = biXPelsPerMeter = biYPelsPerMeter = biClrUsed = biClrImportant = 0; 是结构的构造函数。

这个

biWidth = 0;
biHeight = 0;
biCompression = 0;
biSizeImage = 0;
biXPelsPerMeter = 0;
biYPelsPerMeter = 0;
biClrUsed = 0;
biClrImportant = 0;

是另一种方法:

./PROGRAM TRYING TO OPEN
./FILE NAME/PROGRAM TRYING TO OPEN (or this)

答案 1 :(得分:0)

BMP() - struct BMP的构造函数。在c ++中允许初始化变量,如代码中所示。例如:

int var1, var2, var3;
var1 = var2 = var3 = 4;
std::cout << "var1: " << var1 << std::endl;
std::cout << "var2: " << var2 << std::endl;
std::cout << "var3: " << var3 << std::endl;

输出:

var1: 4
var2: 4
var3: 4

答案 2 :(得分:0)

C ++ Initialisations可以链接到分号,例如

a = b = c = d = e = f = 0;

此处所有内容都将初始化为0

这也可以用多行编写

a 
= b
= c
= d
= f
= 0;

这就是你的案子

BMP2()而言,它是一个名为“CONSTRUCTOR”的C ++特殊函数,每次实例化时都会自动调用它。

答案 3 :(得分:0)

您的声明看起来像没有声明者的typedef声明。 (目前尚不清楚你所说的“括号后面的变量名称”是什么。)

C ++ 17在没有声明符的情况下明确禁止typedef声明,这意味着您的代码格式错误

  

7.1.3 typedef说明符
   1 [...]如果typedef说明符出现在没有声明者的声明中,则该程序格式不正确。

以前版本的C ++标准不包括该措辞(至少以这种简单的形式)。

由于C ++中的类(和枚举)声明可以省略声明符(并且可能,因为在C typedef中只是一个存储类说明符),我不清楚它是否应该是正式合法的在pre-C ++ 17语言中。许多C ++编译器允许它,忽略冗余的typedef。在这种情况下,你拥有的是类BMP2的普通类声明。