0

こんにちは、次の C コードに小さな問題があります。

 //Hardcoded commands:

 #define someCommand 0x1223;
 #(...)

 //functions definitions:
 void socketWrite(uint8_t address, const uint8_t *data, size_t length);

 //main task
 int main(){

 //I want send someCommand to socket
 socketWrite(0xff, &someCommand, 1);

 (...)
 }

もちろん、このコードは私にコンパイルエラーを与えます:エラー:「someCommand」はこのスコープで宣言されていませんでした

しかし、私の質問は、このコマンドを次のように処理できる新しいバッファ データを作成せずに、これを正しく記述する方法についてです。

uint8_t * buff;
*buff = someCommand;
socketWrite(0xff, buff, 1);
4

3 に答える 3

1

someCommand#define です。C プリプロセッサは、ソース テキストをその値に置き換えて生成します。したがって、コードは次のようになります。

socketWrite( 0xff, &0x1223, 1 );

0x1223 のアドレスを取ることはできません。

int value = someCommand;
socketWrite( 0xff, &value, 1 );

動作する可能性があります

それ以外は:

const int someCommand = 0x1223;

以降

socketWrite(0xff, &someCommand, 1);
于 2012-10-28T14:18:14.930 に答える
0

C99 のブレース初期化子を使用してこれを行うことができます (おそらく正しい名前ではありません)。

socketWrite(0xff, &(uint8_t) { someCommand }, 1);

これは基本的に、temp 変数を と等しくしsomeCommandてそのアドレスを取得することと同じです。

于 2012-10-28T14:16:18.410 に答える
0

someCommand 0x1223 を定義します。

「;」は避ける必要があります。マクロ定義のセミコロン。

于 2012-10-28T15:27:24.287 に答える