C链接阶段不会产生警告

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时,我没有收到编译警告/错误.为什么?

pmg*_*pmg 7

因为你骗了编译器......它信任你.

在main.c中,你告诉编译器f是一个函数(声明/原型),但f实际上是指向fc(定义)中定义的长度为7的(不可修改的)字符数组的指针.

不要欺骗编译器.

  • 你应该区分"声明"和"定义".在"宣言"中你说:这就是它,相信我,我告诉你.在"定义"中,您实际上提供了实现/内存. (2认同)