###### 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);
}
```