0

独立して変化する可能性のある 2 つの文字列があります。#definesコード全体で変更する必要がないように、それらを作成することを考えました。と組み合わせるのに問題がありsprintf()ます。

以下では、VoltageSet が 2.2 の場合、文字列 "sour:volt:2.2\r" を cmd バッファーに入れます。

(参考までに、SOUR:VOLT:2.2 は測定器への SCPI コマンドであり、\r はメッセージを終了するためのキャリッジ リターンです)

私のヘッダーで:

#define SETVOLTAGELEVEL "SOUR:VOLT:"
#define TERMINATIONCHAR "\r"

私のCコードでは:

int SetVoltageLevel (double VoltageSet)
{
    char cmd[255]={0};
    sprintf(cmd, "SETVOLTAGELEVEL%fTERMINATIONCHAR", VoltageSet);
}

私はこれを考えすぎていますか?もっと簡単な方法はありますか?

4

4 に答える 4

0

ここには何も問題はありません。プリプロセッサ、つまり define は、コンパイル前にその値に置き換えられます。したがって、違いはわかりません。

于 2013-04-26T19:30:43.780 に答える
0

@BLUEPIXY は 1 つの方法を指摘しています。ここに、あなたが考えていたものに近いものがあります。プリプロセッサは文字列内のトークンを展開しないため、機能しないことに注意してください。ただし、文字列連結を使用できます。知っておくと良い。

int SetVoltageLevel (double VoltageSet)
{
    char cmd[255]={0};
    sprintf(cmd, SETVOLTAGELEVEL "%f" TERMINATIONCHAR, VoltageSet);
}
于 2013-04-26T19:54:26.450 に答える