我正在执行一个包含3个部分的简单makefile,但它不能正常工作这些是我的文件的详细信息.h和.c:
的main.c
#include <stdio.h>
#include <stdlib.h>
#include "hello.h"
int main (void)
{
hello();
return EXIT_SUCCESS;
}
hello.h
#ifndef hello
#define hello
void hello (void);
#endif
的hello.c
#include <stdio.h>
#include <stdlib.h>
void hello (void)
{
printf("Hello World\n");
}
生成文件
all: hello
hello: hello.o main.o
gcc -o hello hello.o main.o
hello.o: hello.c
gcc -o hello.o -c hello.c -W -Wall -ansi -pedantic
main.o: main.c hello.h
gcc -o main.o -c main.c -W -Wall -ansi -pedantic
clean:
rm -rf *.o
mrproper: clean
rm -rf hello
我收到此错误:
答案 0 :(得分:4)
当您编写#define hello
时,您将hello
定义为空令牌。因此,下一个字符串的函数声明实际上变为:
void (void);
这是无效的C代码。
您要做的可能是Include guard,其目的是避免多次包含一个标头。警卫的名称必须与您使用的任何其他令牌不同。通常的命名是FILENAME_H
:
#ifndef HELLO_H
#define HELLO_H
void hello(void);
#endif
答案 1 :(得分:1)
在hello.h第2行中,您将'hello'定义为空标记。删除该行。