簡體   English   中英

為什么GCC對未聲明的功能發出警告不一致?

[英]Why is GCC inconsistent about emitting warnings for undeclared functions?

以下test.c程序

int main() {
   dummySum(1, 2);
   return 0;
}

int dummySum(int a, int b) {
   return a + b;
}

...使用gcc -o test test.c編譯時不會生成任何警告,而下面的代碼會:

int main() {
   dummySum(1, 2);
   return 0;
}

void dummySum(int a, int b) {
   a + b;
}

為什么?

當面對未聲明的函數時,編譯器假定一個函數接受給定數量的參數(我認為)並返回int (我確定的那部分) 你的第二個沒有,所以你得到重新定義警告。

我相信,基於對前進的快速掃描,C99( PDF鏈接 )刪除了這一點。 不過,海灣合作委員會仍然允許他們(帶警告)並不令人驚訝; 我無法想象有多少代碼會開始無法編譯......


建議使用-Wall (打開所有警告),這樣您就可以獲得大量的附加信息(如果您有充分的理由可以根據需要生成它們,可以關閉特定的警告)。

聲明之前不能使用函數。 當函數聲明不可見時,實現在C89中假定函數:

  • 采用未指定(但固定)數量的參數

  • 返回一個int

這稱為隱式函數聲明

在C99中,函數的隱式聲明已被刪除,並且實現可以自由拒絕轉換源代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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