gpt4 book ai didi

c - 在 C 中包含库失败

转载 作者:行者123 更新时间:2023-11-30 15:33:03 24 4
gpt4 key购买 nike

首先我想说我的英语说得很少,所以请原谅我的拼写错误。

我在使用 Code: Blocks 作为 IDE 编译 C 中的某些库时遇到问题

我有以下代码:

//main.c

#include "lib1.h"

int main(){

}

“lib1.h”是

#ifndef GUARD_LIB1
#define GUARD_LIB1

MyTypedef variable123;

#endif

“lib1.c”是

#include "lib2.h"
#include "lib1.h"

最后,“lib2.h”是

#ifndef GUARD_LIB2
#define GUARD_LIB2

typedef int MyTypedef;

#endif

但总是给我编译错误,无法识别“lib1.h”中的MyTypedef,有什么建议吗?

错误是:

"Unknow type name: 'MyTypedef'"

EIDT:

我遇到问题的真正代码是。

// EnzoLib.c
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include "EnzoLib.h"




// EnzoLib.h

//blah blah blah...

//Estructuras
typedef struct {
SOCKET sock;
char nombre[64];
char activo;
struct sockaddr_in from;
} Socket;

//blah blah blah...

和main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <process.h>
#include "EnzoLib.h"

和错误:

C:\Users\Enzo\Documents\codeblocks\lp1\ServidorChat\EnzoLib.h|6|error: unknown type name 'SOCKET'|

我应该在 main.c 中的 #include"EnzoLib.h"之前添加 #include 吗?我只使用在 EnzoLib.h 中声明的函数

编辑2:

我正在尝试以一种简洁的方式进行编程。不要将“#includes”始终放在“.C 文件”上?

最佳答案

编译main.c时,永远不会包含包含MyTypedef定义的头文件lib2.h。因此,在编译 main.c 时,编译器不知道该类型是什么。

也就是说,预处理器运行后,编译器会看到两个“翻译单元”(标准将一个 c 文件及其包含的所有头文件统称为一个翻译单元):

main.c 变为:

//main.c

#ifndef GUARD_LIB1
#define GUARD_LIB1

MyTypedef variable123;

#endif

int main(){

}

lib1.c变成:

#ifndef GUARD_LIB2
#define GUARD_LIB2

typedef struct int MyTypedef;

#endif
#ifndef GUARD_LIB1
#define GUARD_LIB1

MyTypedef variable123;

#endif

lib1.c 中,编译器知道 MyTypedef 是什么,但在 main.c 中则不知道。

如果要在 header 中使用类型,则 header 应包含其依赖项。让 lib1.h 包含 lib2.h,以便使用 lib1.h 的任何人都可以知道 MyTypedef 是什么.

关于c - 在 C 中包含库失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23847553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com