![](/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.