C 語言編譯出現 implicit declaration of function 錯誤


在學習 c 語言的過程中,手動使用 clang 進行編譯的時候,碰到自定義函數會報出下面的錯誤:

 

error: implicit declaration of function 'm' is invalid in C99

      [-Werror,-Wimplicit-function-declaration]

(gcc 中會報出 warning,而不是 error)

 

經過排查,發現是沒有在頭文件那里提前聲明自定義函數,所以提前聲明之后再進行編譯就 OK 了.

這種聲明稱為函數原型,作用是讓編譯器在編譯時對程序中的函數調用檢查合法性.非法的函數調用將導致編譯失敗,即出現語法錯誤,用戶可以根據錯誤信息來調試程序.

同時在函數原型中,可以省略各個形參的名稱,而只寫出形參類型:

int m(int, int);

 

簡單舉例:

 1 #include <stdio.h>
 2 
 3 int m(int x, int y);  // 在這里提前進行聲明
 4 int main(int argc, char const *argv[])
 5 {
 6     int a, b, c;
 7     printf(" 輸入兩個整數:\n");
 8     scanf("%d%d", &a, &b);
 9     c = m(a, b);
10     printf("%d\n", c);
11     return 0;
12 }
13 
14 int m(int x, int y) {
15     int z;
16     z = x > y ? x : y;
17     return z;
18 }

 

或者是把 main 函數寫在文件最下面,也就是自定義函數在上,main 函數在下:

 1 #include <stdio.h>
 2 
 3 int m(int x, int y) {
 4     int z;
 5     z = x > y ? x : y;
 6     return z;
 7 }
 8 
 9 int main(int argc, char const *argv[])
10 {
11     //int m(int x, int y);
12     int a, b, c;
13     printf(" 輸入兩個整數:\n");
14     scanf("%d%d", &a, &b);
15     c = m(a, b);
16     printf("%d\n", c);
17     return 0;
18 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM