0

今天,我对c structure 与 c++ structure的行为有点惊讶。

fun.cpp:http: //ideone.com/5VLPC

struct nod
{
    static int i;
};

int main()
{

    return 0;  
}

上述程序完美运行。

但,

当在C环境中运行相同的程序时,它会给出错误:

prog.c:3: error: expected specifier-qualifier-list before ‘static’

见这里:http: //ideone.com/2JRlF

为什么会这样?

4

3 回答 3

7

因为在 C++ 中,结构只是具有默认可见性的类public。因此,在 C 中,结构只是数据的聚合,它不知道可以将其视为独立类型这一事实。

另请参阅C++ 中结构和类之间的区别是什么

于 2012-06-21T13:12:42.167 回答
4

nod::i每个 C++ 类都有其类命名空间,因此您可以从类命名空间外部引用该静态数据成员,而i在其内部也可以简单地引用该静态数据成员。C 没有命名空间范围,也没有“在”C 结构中的代码,因此无法在命名空间中隐藏全局变量,或者在它们自己的范围内通过它们的非限定名称来引用它们。所以在 C 中没有动机去拥有在 C++ 中被称为静态数据成员的东西。

做吧int nod_i;

于 2012-06-21T13:14:07.087 回答
3

static在 C 中只有内部链接的含义。不要像C++struct中的 astruct或 a那样考虑 C-。class它只是一个聚合器,而不是 OOP 构造。

由于 C 没有类,因此这种使用static没有意义。

于 2012-06-21T13:12:29.967 回答