Error: Non-static-const variable in array dimension 代码出错

#include <stdio.h>
int add(int a[m][n]){
int sum=0,i,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(i==0||j==0||i==m-1||j==n-1){
sum+=a[i][j];
}
}
}
return sum;
}
int main(){
int m,n;
printf("行:m=");
scanf("%d\n",&m);
printf("列:n=");
scanf("%d\n",&n);
int a[m][n],sum=0,i,j;
printf("请输入%d个整数:",m*n);
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
sum=add(a);
printf("外侧元素和:%d",sum);

}

修改如下,供参考:

#include <stdio.h>
#define M 20         //修改
#define N 20         //修改 
int add(int a[][N],int m,int n) { //修改
    int sum = 0, i, j;
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            if (i == 0 || j == 0 || i == m - 1 || j == n - 1) {
                sum += a[i][j];
            }
        }
    }
    return sum;
}
int main() {
    int m, n;
    printf("行:m=");
    scanf("%d", &m);  //scanf("%d\n", &m);修改
    printf("列:n=");
    scanf("%d", &n); //scanf("%d\n", &n);修改
    int a[M][N], sum = 0, i, j;   //修改
    printf("请输入%d个整数:", m * n);
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            scanf("%d", &a[i][j]);
        }
    }
    sum = add(a, m, n);  //修改
    printf("外侧元素和:%d", sum);
}