Dan*_*can 2 c linux linker gcc
我有以下文件:
main.c:
int f(void);
int main(void)
{
f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
FC:
char *f = "linker";
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
运行makefile时,我没有收到编译警告/错误.为什么?
因为你骗了编译器......它信任你.
在main.c中,你告诉编译器f是一个函数(声明/原型),但f实际上是指向fc(定义)中定义的长度为7的(不可修改的)字符数组的指针.
不要欺骗编译器.