![](/img/trans.png)
[英]Compiling and Linking pure C and CUDA code [warning: implicit declaration of function]
[英]C linking stage generates no warning
我有以下文件:
main.c:
int f(void);
int main(void)
{
f();
return 0;
}
FC:
char *f = "linker";
GNUMakefile:
CC = gcc
CFLAGS = -Wall -g
all: main
main: main.o f.o
main.o: main.c
f.o: f.c
clean:
rm -rf *.o main
运行makefile时,我没有收到编译警告/错误。 为什么?
因为你骗了编译器......它信任你。
在main.c中,你告诉编译器f
是一个函数( 声明/原型 ),但f
实际上是指向fc( 定义 )中定义的长度为7的(不可修改的)字符数组的指针。
不要欺骗编译器。
你已经告诉编译器f是一个函数。 它不是,但实施时没有义务记录此处需要警告的类型。 Gcc没有,其他一些实现可能会。
解决方法是将f的声明放入标题中,并将其包含在每个翻译单元中,这将使错误显而易见。
如果你把声明int f(void); 在两个文件中包含的头文件中,您将获得明确的编译器错误。 在你目前的情况下,编译方式一切都很好。
在makefile中我想念gcc main.c部分和ln部分
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.