###### tags: `C` `VSCode` 警告提示: implicit declaration of function 'square' [-Wimplicit-function-declaration] === ## :warning: 問題 * 在寫C語言聖經本的ch10-4-12習題時,遇到警告: "**implicit declaration of function 'square' [-Wimplicit-function-declaration]**" * 我的程式碼如下: ``` #include <stdio.h> #include <stdlib.h> int main (void){ int i,x,y; int *arr; printf("制定一維陣列大小:\n"); scanf("%d",&i); int A[i]; printf("輸入數字:\n"); for (y=0;y<i;y++) scanf("%d",&A[y]); for (y=0,arr=A; y<i; y++,arr++){ printf("%p\n", arr); printf("A[%d]=%d\n\n",y,*(arr)); square(arr); } for (x=0,arr=A; x<i; x++,arr++) printf("帶入function的結果:A[%d]=%d\n",x,*(arr)); } void square (int *arr){ *arr=(*arr)*(*arr); } ``` --- ## :ok_hand: 解決 查閱C聖經本的Chapter 8.2.1**宣告函數原型與定義函數**的小節,發現原來是因為我沒有做函數宣告,**"宣告函數的目的在於用來告知編輯器,在程式碼裡我們將使用這個函數"**,因此我加入宣告後警告便會消失,如下所示: ``` void square(int *); ``` 程式碼修改為: ``` #include <stdio.h> #include <stdlib.h> void square(int *); int main (void){ int i,x,y; int *arr; printf("制定一維陣列大小:\n"); scanf("%d",&i); int A[i]; printf("輸入數字:\n"); for (y=0;y<i;y++) scanf("%d",&A[y]); for (y=0,arr=A; y<i; y++,arr++){ printf("%p\n", arr); printf("A[%d]=%d\n\n",y,*(arr)); square(arr); } for (x=0,arr=A; x<i; x++,arr++) printf("帶入function的結果:A[%d]=%d\n",x,*(arr)); } void square (int *arr){ *arr=(*arr)*(*arr); } ```