C中的常量正确性是多么必要/有用

时间:2013-08-23 06:57:42

标签: c const const-correctness

我正在学习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只是为函数创建一个本地副本,这比调用它并创建另一个临时计数器变量更好吗?

如果这个问题太笼统,我道歉。每当我在其他地方搜索这种东西时,我发现网站告诉我语法的可能性,但没有比这更深刻。

0 个答案:

没有答案