2012-09-30 89 views
2

我是C編程新手。當我將blank.h文件包含到Test.c文件中時,程序將無法編譯,但是當我將blank.c文件包含到Test.c文件時,它編譯得很好。以下是所有.c和.h文件的來源。我使用gcc作爲我的編譯器,我有一種感覺,我需要做一些與它的鏈接?任何幫助將非常感謝!C包括.h不工作?

這是TEST.C源

#include <stdio.h> 
#include "blank.h" 
#include "boolean.h" 

int main() 
{ 
    bool result = blank(""); 

    printf("%d\n", result); 

    return 0; 
} 

這是blank.h源

// Header file for blank function 

bool blank(char string[]); 

這是blank.c源

#include "boolean.h" 
#include "blank.h" 
#include <regex.h> 

bool blank(char string[]) 
{ 

    regex_t regex_blank; 
    int blank = regcomp(&regex_blank, "[:blank:]", 0); 

    blank = regexec(&regex_blank, string, 0, NULL, 0); 

    if (string == NULL || blank == 1) 
     return true; 
    else 
     return false; 
} 

和最後的布爾.h

// Boolean 

// Define true 
#ifndef true 
#define true 1 
#endif 

// Define false 
#ifndef false 
#define false 0 
#endif 

typedef int bool; 
+0

如何編譯它?您還需要鏈接從'blank.c'創建的對象文件。 –

回答

1

好的,所以我嘗試了你提供的源代碼。有幾個問題。以下是我如何建立的確切步驟,以及我所固定的步驟。看看它是否適用於您:

在一個文件夾中創建4個文件:Test.c,blank.c,blank.h和boolean.h 已複製的代碼覆蓋。

從貝跑:

gcc Test.c blank.c -o b 

輸出:

In file included from Test.c:2:0: 
blank.h:3:1: error: unknown type name ‘bool’ 
blank.c: In function ‘blank’: 
blank.c:11:46: error: ‘NULL’ undeclared (first use in this function) 
blank.c:11:46: note: each undeclared identifier is reported only once for each function it appears in 

要解決的第一個錯誤: 在空白。小時加入此之上:#include "boolean.h"

以固定第二錯誤: 在blank.c加入此之後另一個包括:#include <stdlib.h>

再次一旦終端跑:

gcc Test.c blank.c -o b 

然後從終端運行./b並打印1.

0

你忘包括防護裝置:

blank.h:

#ifndef BLANK_H_INCLUDED 
#define BLANK_H_INCLUDED 

bool blank(char string[]); 

#endif 

這些包括防護裝置防止頭文件中的內容的每一個源文件包括它的時間被重新定義。一定要爲boolean.h做到這一點。

+0

我試過這個,我仍然得到以下錯誤。在Test.c中包含的文件中:2: blank.h:5:錯誤:期望'''',';','asm'或'__attribute__'在'空白'之前 – amedeiros

2

我想你是手動運行GCC,否則你不會有這個問題。

您可以手動爲每個.c文件運行GCC,或者您可以爲它們全部收集而運行它。

gcc *.c 

如果你做的更晚,你不應該遇到鏈接錯誤。

+1

使用'* .c'可能會導致「多個主要」錯誤,請更好地列出相關文件。 –

+1

我假設海報有這個問題。新程序員的常見問題。應該做'gcc blank.c Test.c' – texasbruce

+0

我也試過這個以及相同的結果。不知道爲什麼即時獲取這些erros。我使用gcc的MacBook不知道這是否有幫助。 – amedeiros

0

您需要在blank.hboolean.h

// Header file for blank function 

#include "boolean.h" 
bool blank(char string[]); 

,或者您需要將其包括在befor Test.cblank.h,否則編譯器不知道的blank聲明的類型bool

除此之外,始終使用的建議包括守衛是好的,應該遵循。

0

一旦從Test.c中刪除#include「blank.h」並運行gcc Test.cit.c,它就會編譯好。感謝您對include guard的建議,並做了gcc Text.c blank.c