相关疑难解决方法(0)

801
推荐指数
5
解决办法
49万
查看次数

如何在c中的多个文件使用的头中声明一个结构?

如果我有一个带结构的source.c文件:

struct a { 
    int i;
    struct b {
        int j;
    }
};
Run Code Online (Sandbox Code Playgroud)

如何在另一个文件(即func.c)中使用此结构?

我应该创建一个新的头文件,在那里声明结构并包含该头func.c

或者我应该在头文件中定义了整个结构,包括在两个source.cfunc.c?如何extern在两个文件中声明结构?

typedef应该吗?如果是这样,怎么样?

c structure header file

112
推荐指数
3
解决办法
25万
查看次数

C - 限制结构范围

我在.c文件中有这个结构:

struct entry {
    int position;
    int length;
    struct entry *node;
};
Run Code Online (Sandbox Code Playgroud)

现在,我如何将此结构布局的范围限制为主机文件,以便在另一个文件中使用相同名称的新结构布局时,我不会收到"重新定义"错误?

我尝试在struct之前使用static,但似乎没用(我也没有意义).顺便说一下,这个问题对我来说似乎没有用,因为我在链接文件中复制stuct条目时会遇到"重新定义"错误(使用MinGW).

---编辑---
对于那些想要了解更多的人:这里这里.

c struct scope

5
推荐指数
1
解决办法
1914
查看次数

为什么C和C++中相同标识符的大小不同?

#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.

有人能解释为什么会有区别吗?

c c++ name-lookup

4
推荐指数
1
解决办法
310
查看次数

结构标记、联合标记和枚举标记是否具有单独的命名空间?

肖特的回答很好。他声称

  • 标签(结构、联合和枚举的名称)。

我认为结构、联合和枚举的标签具有不同的命名空间,因此这段代码完全没问题:

// In the same scope
struct T {};
union T {};
enum T {};
Run Code Online (Sandbox Code Playgroud)

但是从上面的引文推断,看起来所有标签都共享相同的命名空间。答案是不够清楚还是我错了?

c namespaces name-lookup

2
推荐指数
1
解决办法
234
查看次数

标签 统计

c ×4

c++ ×2

name-lookup ×2

struct ×2

file ×1

header ×1

namespaces ×1

scope ×1

structure ×1

typedef ×1