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);

这本质上与使临时变量等于someCommand并获取它的地址相同。

于 2012-10-28T14:16:18.410 回答
0

定义一些命令 0x1223;

你必须避免';' 宏定义中的分号。

于 2012-10-28T15:27:24.287 回答