0

このコードスニペットでは、MatrixMultiplication()メソッド内の「printf」コマンドがそのテキストを表示することを期待しています。前の行で「size」が宣言されていて、「test」が1に設定されていても、そうではありません。コードは次のとおりです。

void MatrixMultiplication(float * M, float * N, float * P, int Width, int test)
{
        int size = Width * Width * sizeof(float);

        #if defined size
        if (test)
        {
                printf("Should be equal to %d.  Int size:%d", Width * Width * sizeof(float), size);
        }
        #endif
}

int main (int argc, char ** argv)
{

        // Omitted for brevity...

        int test = 1;                                                   

        // Omitted for brevity...

        MatrixMultiplication(hostM, hostN, reference, atoi(matrix_id), test);

        // Omitted for brevity...

}

私はこのコマンドでコンパイルしています:

nvcc -I/home/sbu/NVIDIA_GPU_Computing_SDK/C/common/inc -L/home/sbu/NVIDIA_GPU_Computing_SDK/C/lib -o matrixmul matrixmul.cu -lcutil_x86_64

この種の「#ifdefined」コマンドが機能しないnvccについて何かありますか?私は以前、gccを使用するネイティブCおよびC ++コードでこの種の構文を使用しましたが、問題なく機能しました。

この問題に関する照明は素晴らしいでしょう!

Pastebinの完全なコードは次のとおりです:http://pastebin.com/SusnpgFc

4

2 に答える 2

2

前の行で「サイズ」が宣言されていても、そうではありません

その#if defined size名前のプリプロセッサマクロが定義されているかどうかをテストし、その名前の変数がプログラムで宣言されているかどうかはチェックしません。

#define sizeまたは#define size some replacement tokensそれ以前の場合にのみtrueと評価されます。

于 2012-10-31T21:04:07.380 に答える
1

前処理はコンパイルの前に行われます。したがって、プリプロセッサがこれをチェックするとき:

#if defined size

sizeはどこにも定義されていないため、に置き換えられ0ます。したがって、ifコードセグメント全体がコンパイラに渡される前に削除されることはありません。

于 2012-10-31T21:04:42.923 に答える