84-结构和联合
B.9.4 结构和联合
声明一个有标记的结构或联合后,就可以在C++中使用这个标记作为类型名:
struct duo
{
int a;
int b;
};
struct duo m; /* C和C++都可以 */
duo n; /* C不可以,C++可以*/
结果是结构名会与变量名冲突。例如,下面的程序可作为C程序编译,但是作为C++程序编译时会失败。因为C++把 printf() 语句中的 duo 解释成结构类型而不是外部变量:
#include <stdio.h>
float duo = 100.3;
int main(void)
{
struct duo { int a; int b;};
struct duo y = { 2, 4};
printf ("%f\n", duo); /* 在C中没问题,但是在C++不行 */
return 0;
}
在C和C++中,都可以在一个结构的内部声明另一个结构:
struct box
{
struct point {int x; int y; } upperleft;
struct point lowerright;
};
在C中,随后可以使用任意使用这些结构,但是在C++中使用嵌套结构时要使用一个特殊的符号:
struct box ad; /* C和 C++都可以 */
struct point dot; /* C可以,C++不行 */
box::point dot; /* C不行,C++可以 */