为了控制结构成员并强制程序员使用 getter/setter 函数,我想编写如下模式的代码:
/* Header file: point.h */
...
/* define a struct without full struct definition. */
struct point;
/* getter/setter functions. */
int point_get_x(const struct point* pt);
void point_set_x(struct point* pt, int x);
...
//--------------------------------------------
/* Source file: point.c */
struct point
{
int x, y;
};
int point_get_x(const struct point* pt) {return pt->x; }
void point_set_x(struct point* pt, int x) {pt->x = x;}
//--------------------------------------------
/* Any source file: eg. main.c */
#include "point.h"
int main()
{
struct point pt;
// Good: cannot access struct members directly.
// He/She should use getter/setter functions.
//pt.x = 0;
point_set_x(&pt, 0);
}
但此代码不能使用 MSVC++ 2010 进行编译。
我应该进行哪些更改以进行编译?
注意:我使用的是 ANSI-C (C89) 标准,而不是 C99 或 C++。
在 point.c 中创建一个 make_point
函数来创建点;main.c 不知道结构有多大。
也
typedef struct point point;
将支持在声明中使用point
而不是struct point
。
point pt;
类型的名称为 struct point
。你必须每次都使用整个东西,或者你需要typedef
它。*
即你应该写
struct point pt;
在main
.
您可能正在考虑标准库中的FILE*
和类似的东西,并希望复制该行为。要做到这一点,请使用
struct s_point
typedef struct s_point point;
在标题中。(有较短的写法,但我想避免混淆。这将声明一个名为 struct s_point
的类型,并为其分配别名point
。
(*) 请注意,这与 c++ 不同,在 c++ 中,struct point
声明一个名为 point
的类型,它是一个struct
。