簡體   English   中英

C鏈接階段不會產生警告

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM