我是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(®ex_blank, "[:blank:]", 0);
blank = regexec(®ex_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;
答案 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