我正在学习 C 和汇编,并想弄清楚 const 正确性和实际生成的代码之间的联系。
我的问题是,给定下面的这个函数,我如何为编译器提供尽可能多的提示,以便它生成最有效的代码。
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 的指针?
声明它是指向 const 的指针实际上是否有用?
将 bytes_to_send 声明为 non-const 是否只是为函数创建了一个本地副本,这是否比调用它 const 并创建另一个临时计数器变量更好?
如果这个问题太笼统,我很抱歉。每次我在其他地方搜索这种东西时,我都会找到一些网站告诉我语法的可能性,但没有比这更深的了。