いくつかのベクトルとそれに対応する係数をとる小さなCプログラムがあります。この情報を使用して、ベクトルの長さ(モジュラス)を計算します。次に、プログラムは長さでベクトルを使用して配列を並べ替え、すべてのベクトルを正しい順序で表示します。
すべてが正常に機能しているようです。ただし、-wall引数と-ansi引数を使用してコードをコンパイルすると、次の警告が表示されます。
|23|warning: ISO C90 forbids variable-size array 'v'
|23|warning: ISO C90 forbids mixed declarations and code
|44|warning: passing argument 1 of 'swap' from incompatible pointer type
|44|warning: passing argument 2 of 'swap' from incompatible pointer type
私が使用するコード:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void swap(double **p, double **q)
{
double *tmp;
tmp = *p;
*p = *q;
*q = tmp;
}
int main()
{
int dim, num;
int i, j;
double **w;
scanf("%d %d", &dim, &num);
w = calloc(num, sizeof(double *));
double v[num];
/* Get vector coefficients for each vector and calculate the length of each vector */
for(i = 0; i < num; i++)
{
w[i] = calloc(dim, sizeof(double));
for(j = 0; j < dim; j++)
{
scanf("%le", &w[i][j]);
v[i] += pow(w[i][j], 2);
}
}
/* Sort vectors by length */
for(i = 0; i < num-1; ++i)
{
for(j = num-1; j > i; --j)
if(v[j-1] > v[j])
{
swap(&w[j-1], &w[j]);
swap(&v[j-1], &v[j]);
}
}
/* Display vectors, including their coefficients, ordered by length */
for(i = 0; i < num; i++)
{
for(j = 0; j < dim; j++)
{
printf("%e", w[i][j]);
if(j != dim)
printf(" ");
}
printf("\n");
}
return 0;
}
これらの警告を修正する方法について何かアイデアはありますか?
前もって感謝します。