1

printf拡張機能が有効になっているATIカードでOpenCLを使用しています。変数を出力する関数を作成しました。

void printVar(constant char* name, float var)
{
    printf("%s: %f\r\n", name, var);
}

このコードは、プレーンCとしてコンパイルすると期待どおりに機能しますが、OpenCLで呼び出した場合

printVar("foo", 0.123);

結果は常に、「foo:0.123」ではなく、ランダムな文字の後に0.123が続きます。コンパイラにchar*文字列の認識に問題があると思いますが、関数を機能させるための回避策または修正はありますか?

4

1 に答える 1

0

コメントで述べたように、私も同じ動作をしますが、あなたが示したユースケースの簡単な回避策を提案できます。つまり、コンパイル時に文字列がわかっている場合は、代わりにdefineステートメントを使用できます。

#define PRINTVAR(N,X) (printf(N ": %f\r\n", X))
于 2011-04-06T19:03:55.423 に答える