我正在学习C和汇编,并希望弄清楚const-correctness和实际生成的代码之间的联系。
我的问题是,鉴于下面的这个函数,我如何给编译器提供尽可能多的提示,以便生成最有效的代码。
void hdlc_tx_frame(const void* const buffer, uint8_t bytes_to_send)
{
uint8_t data;
uint8_t* tmp_buffer = buffer;
// Start marker
data = HDLC_FLAG_SEQUENCE;
hdlc_tx_byte(&data);
// Send escaped data
while(bytes_to_send)
{
// Get next data
data = *(tmp_buffer++);
// See if data should be escaped
if((data == HDLC_CONTROL_ESCAPE) || (data == HDLC_FLAG_SEQUENCE))
{
uint8_t tmp = HDLC_CONTROL_ESCAPE;
hdlc_tx_byte(&tmp);
data ^= HDLC_ESCAPE_BIT;
}
// Send data
hdlc_tx_byte(&data);
// decrement counter
bytes_to_send--;
}
// End marker
data = HDLC_FLAG_SEQUENCE;
hdlc_tx_byte(&data);
}
请注意,hdlc_tx_byte(&data)
不会以任何方式修改data
。
将buffer
声明为const的const指针,然后再创建一个tmp_buffer
变量,而不仅仅是将buffer
作为指向const的指针?< / p>
声明它是指向const的指针实际上有用吗?
将bytes_to_send声明为非const只是为函数创建一个本地副本,这比调用它并创建另一个临时计数器变量更好吗?
如果这个问题太笼统,我道歉。每当我在其他地方搜索这种东西时,我发现网站告诉我语法的可能性,但没有比这更深刻。