[英]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.