0

私は 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

bufferconst への const ポインターとして宣言してから、単純に const へのポインターとしてtmp_buffer残すよりも、変数を作成する努力をしていますか?buffer

それが const へのポインターであることを宣言することは、実際には何らかの方法で役立ちますか?

bytes_to_send を非 const として宣言すると、単に関数のローカル コピーが作成されますか?これは、const を呼び出して別の一時カウンター変数を作成するよりも優れた形式ですか?

この質問が一般的すぎる場合は、お詫び申し上げます。他の場所でこの種のものを検索するたびに、構文の可能性を教えてくれるサイトを見つけますが、それ以上のものはありません。

4

0 に答える 0