这个问题好久前就知道了,但是这次出现竟然糊涂了半小时,特此记录增强记忆。
在VC6中,如果是cpp后缀名那么是没有问题的,但是如果后缀名为c,那么就会出现 error C2081 等错误,意思就是 S 没有定义等。
应该写成下面的定义方式
看看微软写的就知道了
struct S {
int a, b;
} s_instance;
也可以
typedef struct {
int a, b;
} S;
S s_instance;
注意:前者struct S {} 是一个类型,中间的S是一个tag,所以只能用1次。
后者typedef把struct {} 定义为类型S,所以S可以多用。
//////////////////////////////////////////////////////////////////////////
因为自己一直使用C++,习惯于下面的方式定义 structstruct S{
//
};
在VC6中,如果是cpp后缀名那么是没有问题的,但是如果后缀名为c,那么就会出现 error C2081 等错误,意思就是 S 没有定义等。
应该写成下面的定义方式
typedef struct tagS{
//
}S;
看看微软写的就知道了
typedef struct tagRECT
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;# re: struct 定义在C++与C中的区别(VC6编译器)
在C里面,你可以struct S {
int a, b;
} s_instance;
也可以
typedef struct {
int a, b;
} S;
S s_instance;
注意:前者struct S {} 是一个类型,中间的S是一个tag,所以只能用1次。
后者typedef把struct {} 定义为类型S,所以S可以多用。