在C++中,之间有什么区别:
struct Foo { ... };
Run Code Online (Sandbox Code Playgroud)
和
typedef struct { ... } Foo;
Run Code Online (Sandbox Code Playgroud) 如果我有一个带结构的source.c文件:
struct a {
int i;
struct b {
int j;
}
};
Run Code Online (Sandbox Code Playgroud)
如何在另一个文件(即func.c)中使用此结构?
我应该创建一个新的头文件,在那里声明结构并包含该头func.c?
或者我应该在头文件中定义了整个结构,包括在两个source.c和func.c?如何extern在两个文件中声明结构?
我typedef应该吗?如果是这样,怎么样?
我在.c文件中有这个结构:
struct entry {
int position;
int length;
struct entry *node;
};
Run Code Online (Sandbox Code Playgroud)
现在,我如何将此结构布局的范围限制为主机文件,以便在另一个文件中使用相同名称的新结构布局时,我不会收到"重新定义"错误?
我尝试在struct之前使用static,但似乎没用(我也没有意义).顺便说一下,这个问题对我来说似乎没有用,因为我在链接文件中复制stuct条目时会遇到"重新定义"错误(使用MinGW).
#include <stdio.h>
int T;
int main()
{
struct T { double x; };
printf("%zu", sizeof(T));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我在C中运行此代码,结果是4,而在C++中它是8.
有人能解释为什么会有区别吗?
肖特的回答很好。他声称
- 标签(结构、联合和枚举的名称)。
我认为结构、联合和枚举的标签具有不同的命名空间,因此这段代码完全没问题:
// In the same scope
struct T {};
union T {};
enum T {};
Run Code Online (Sandbox Code Playgroud)
但是从上面的引文推断,看起来所有标签都共享相同的命名空间。答案是不够清楚还是我错了?
c ×4
c++ ×2
name-lookup ×2
struct ×2
file ×1
header ×1
namespaces ×1
scope ×1
structure ×1
typedef ×1