你好我跟随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);
答案 0 :(得分:1)
someCommand
是一个#define。 C预处理器通过将其替换为值来生成源文本。
所以你的代码看起来像:
socketWrite( 0xff, &0x1223, 1 );
无法获取0x1223的地址。
int value = someCommand;
socketWrite( 0xff, &value, 1 );
可能有效
否则:
const int someCommand = 0x1223;
以后
socketWrite(0xff, &someCommand, 1);
答案 1 :(得分:0)
您可以使用C99的大括号初始化器(可能不是正确的名称)
来完成此操作socketWrite(0xff, &(uint8_t) { someCommand }, 1);
这与使临时变量等于someCommand
并获取其地址基本相同。
答案 2 :(得分:0)
你必须避免';'宏定义中的分号。