2017年度「プログラミング言語1」「プログラミング言語演習」のページ

補足資料

const double (*a)[2];

以下のプログラムをコンパイルすると、警告が出ることがあるでしょう。

void    foo(const double (*a)[2], double *p);

void
bar(double xa, double ya, double xb, double yb, double xc, double yc, double *xp, double *yp)
{
        double  a[3][2];
        double  p[2];
        a[0][0] = xa;
        a[0][1] = ya;
        a[1][0] = xb;
        a[1][1] = yb;
        a[2][0] = xc;
        a[2][1] = yc;
        foo(a, p);
        *xp = p[0];
        *yp = p[1];
}

これは、Cの言語仕様の欠陥に由来するもので、仕方ありません。次の二つの方法のどちらかでしのいでください。

方法1
void    foo(const double (*a)[2], double *p);

void
bar(double xa, double ya, double xb, double yb, double xc, double yc, double *xp, double *yp)
{
        double  a[3][2];
        double  p[2];
        a[0][0] = xa;
        a[0][1] = ya;
        a[1][0] = xb;
        a[1][1] = yb;
        a[2][0] = xc;
        a[2][1] = yc;
        foo((const double (*)[2])a, p);
        *xp = p[0];
        *yp = p[1];
}
        
    
方法2
void    foo(const double (*a)[2], double *p);

void
bar(double xa, double ya, double xb, double yb, double xc, double yc, double *xp, double *yp)
{
        const double    a[3][2] = {
                {xa, ya},
                {xb, yb},
                {xc, yc},
        };
        double  p[2];
        foo(a, p);
        *xp = p[0];
        *yp = p[1];
}
        
    

戻る
奈良女子大学生活環境学部情報衣環境学科生活情報通信科学コース