C包括.h不工作?

时间:2012-09-30 23:26:44

标签: c gcc

我是C编程新手。当我将blank.h文件包含到Test.c文件中时,程序将无法编译,但是当我将blank.c文件包含在Test.c文件中时,它编译得很好。以下是所有.c和.h文件的来源。我使用gcc作为我的编译器,我有一种感觉,我需要做一些与它的链接?任何帮助都会非常感谢!

这是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;
}

最后是boolean.h

// Boolean

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

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

typedef int bool;

5 个答案:

答案 0 :(得分:2)

我想你手动运行GCC,否则你不会遇到这个问题。

您可以手动为每个.c文件运行GCC,也可以为它们全部运行它们。

gcc *.c

如果你这样做,你不应该遇到链接器错误。

答案 1 :(得分:1)

好的,所以我尝试了你提供的源代码。有几个问题。以下是我如何构建的确切步骤,以及我修复的内容。看看这是否适合你:

在一个文件夹中创建了4个文件:Test.c,blank.c,blank.h和boolean.h 复制代码。

从shell运行:

 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

修复第一个错误: 在blank.h中添加了这个:#include "boolean.h"

修复第二个错误: 在blank.c中添加了另一个包括:#include <stdlib.h>

终端又一次跑了:

 gcc Test.c blank.c -o b

然后从终端运行./b并打印1。

答案 2 :(得分:0)

你忘了包括警卫:

blank.h:

#ifndef BLANK_H_INCLUDED
#define BLANK_H_INCLUDED

bool blank(char string[]);

#endif

这些包括防护每次源文件包含时都会阻止重新定义头文件的内容。确保也为boolean.h执行此操作。

答案 3 :(得分:0)

您需要在boolean.h

中加入blank.h
// Header file for blank function

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

或者您需要在blank.h中包含Test.c,否则编译器不会知道bool声明中的blank类型。

除此之外,总是使用的建议包括警卫是好的,应该遵循。

答案 4 :(得分:0)

从Test.c中删除#include“blank.h”并运行gcc Test.c blank.c后编译正常。感谢您对包含警卫的建议,以及执行gcc Text.c blank.c