我有以下文件:
主.c:
int f(void);
int main(void)
{
f();
return 0;
}
f.c:
char *f = "linker";
GNUMake 文件:
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
运行生成文件时,我没有收到任何编译警告/错误。为什么?
最佳答案
因为你欺骗了编译器……而它信任你。
在 main.c 中,您告诉编译器 f
是一个函数(声明/原型(prototype)),但实际上 f
是一个指向 f.c(定义)中定义的长度为 7 的(不可修改的)字符数组的指针。
不要欺骗编译器。
关于C 链接阶段不生成警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605317/