0

我正在学习 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 并创建另一个临时计数器变量更好?

如果这个问题太笼统,我很抱歉。每次我在其他地方搜索这种东西时,我都会找到一些网站告诉我语法的可能性,但没有比这更深的了。

4

0 回答 0