-1

Microsoft Visual Studio 2010 を使用して C コードを記述しています。これは私が定義したコードです:

#define setImagVal_Matrix(matrix,type,x,y,val) \
(getImagVal_Matrix(matrix,type,x,y) = (val))

次に、この関数内で使用しています:

for(bands=0; bands < no_of_bands; bands++) {
outputmatrix[bands] =  new_Matrix(yrange,xrange,getDataType_Image(inputImage),getDataFormat_Image(inputImage));
    for(r=0; r < no_of_rows; r++) {
        for(c=0; c < no_of_cols; c++) {
            if(c<x1 || c>x2 || r<y1 || r>y2)
            {
                continue;
            }
            else
            {
                  setImagVal_Matrix(outputmatrix[bands],getDataType_Matrix(outputmatrix[bands]),c-x1,r-y1,123);
            }
        }
    }
}

ただし、 setImagVal_Matrix 関数呼び出しでこのエラーが表示されます:
「エラー:式が必要です」

そして、ソリューションをビルドすると、同じ行に構文エラーを示す出力が表示されます:
1>c:\cviplab-net-2010\cviplab\crop.c(50): error C2059: syntax error : ')'

数時間費やした後、私はまだエラーの原因を見つけることができません. それを修正する方法はありますか?

編集:
前処理されたファイルを分析したところ、構文エラーが見つかりましたが、それでも修正方法がわかりません。エラーが発生する行は次のとおりです
((((((outputmatrix[bands])->data_type) **)((outputmatrix[bands])->iptr))[r-y1][c-x1]) = (123));
。エラーは) 後のものです**

4

3 に答える 3

2

マクロを関数として使用するのをやめてください。これを試して:

inline void setImagVal_Matrix(int matrix, int type, int x, int y, int val) {
    getImagVal_Matrix(matrix, type, x, y) = val;
}

必要に応じて型を変更するintと、わかりにくいエラー メッセージではなく、有用なエラー メッセージを表示するコンパイラが表示されます。一体、それは引数の型を理解するのにも役立ちます.

于 2013-02-28T14:40:41.530 に答える
0

少なくともマクロ引数に角かっこを使用することを提案したいと思います。

#define setImagVal_Matrix((matrix),(type),(x),(y),(val)) \
       (getImagVal_Matrix((matrix),(type),(x),(y)) = (val))

また、それが本当にブラケットの問題であるかどうかを確認するために、前処理されたファイルを調べることができます。

ただし、実際にこの目的でマクロを使用することは、適切な方法ではありません。関数呼び出しが気になる場合は、関数を作成できますinline

inline void setImagVal_Matrix(matrix,type,x,y,val) {
    getImagVal_Matrix(matrix,type,x,y) = val;
}

これはコンパイラーの推奨事項にすぎないという事実にもかかわらずinline、これにより、多くのコンパイルエラーを回避し、実行時エラーをほとんどデバッグすることができなくなります。

于 2013-02-28T14:55:56.283 に答える
0

マクロ内で、左辺値のように見えないものに割り当てを行います。どういう意味==ですか?

于 2013-02-28T14:41:11.727 に答える