我正在执行一个简单的 makefile,它包含 3 个部分,但效果不佳这些是我的文件 .h 和 .c 的详细信息:
主.c
#include <stdio.h> #include <stdlib.h> #include "hello.h" int main (void) { hello(); return EXIT_SUCCESS; }
你好.h
#ifndef hello #define hello void hello (void); #endif
你好.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
我收到这个错误:
最佳答案
当您编写 #define hello
时,您将 hello
定义为空标记。因此,下一个字符串的函数声明实际上变成了:
void (void);
这不是有效的 C 代码。
您尝试做的可能是 Include guard ,其目的是避免一个 header 被多次包含。 guard 的名字必须与您使用的任何其他 token 不同。通常的命名是 FILENAME_H
:
#ifndef HELLO_H
#define HELLO_H
void hello(void);
#endif
关于gcc - 使 : *** [main. o] 错误 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40051500/