我有一个结构需要跟踪这个结构的实例数。有没有办法在结构中做到这一点,或者我是否必须在结构外部创建一个单独的计数器并增加它?
由于
答案 0 :(得分:0)
要执行此操作,您需要一个static
变量,但在C中struct
不允许有static
个变量(在C ++中你可以,因为它们基本上是类) 。特别是因为没有名称空间,所以在struct
定义中声明它没有任何区别。
您可以拥有全局static
变量,如果您不想公开任何内容,这可能是更简单的解决方案,例如:
//header.h
void incrementCounter();
void decrementCount();
int counterValue();
//header.c
static int counter = 0;
void incrementCounter() { ++counter; }
..
答案 1 :(得分:0)
C语言中没有任何内容可以跟踪何时创建和销毁结构。实际上,当使用malloc()等函数为结构保留内存时,编译器无法知道存在什么结构"。这与Java或C ++不同,Java或C ++中对象可以存在的唯一方法是通过询问对象的代码来创建实例。顺便提一下,在.NET中,类对象通常只是通过对底层类的请求而存在,但结构 - 如在C中 - 可以在没有任何与结构相关的代码知道的情况下生成。