簡體   English   中英

在C中包含庫失敗

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM