[英]fail including libraries in C
首先我想说我只会说一点英语,所以请原谅我的拼写错误。
我在使用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中声明的函数
EDIT2:
是我要尝试编写一种整洁的方法吗? 不要将“ #includes”始终放在“ .C文件”上吗?
编译main.c
,永远不会包含包含MyTypedef
定义的标头lib2.h
因此,在编译main.c
,编译器不知道该类型是什么。
也就是说,在预处理器运行之后,编译器会看到两个“翻译单元”(标准调用ac文件,并且它的所有标头共同包括一个翻译单元):
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
中则不知道。
如果要在标题中使用类型,则标题应包括其依赖项。 让lib1.h
包含lib2.h
,以便使用lib1.h
任何人lib1.h
可以知道MyTypedef
是什么。
将包含的文件从EnzoLib.c移到EnzoLib.h,仅保留#include“ EnzoLib.h”
EnzoLib.h的内容应类似于
#ifndef ENZOLIB_H
#define ENZOLIB_H
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
typedef struct {
SOCKET sock;
char nombre[64];
char activo;
struct sockaddr_in from;
} Socket;
#endif
//end of EnzoLib.h
EnzoLib.c的内容应该在线
#include "EnzoLib.h"
//Freely use the Socket structure
Socket mySocket;
//end of EnzoLib.c
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.