2 つの「モジュール」があるとします。たとえば、RS-232 ポートのハードウェア インターフェイス レイヤーと、それをより抽象化するためのその上のレイヤー。
次のような受信バッファがありますU8BIT myBuffer[MAX]
。U8BIT
型定義されています:typedef unsigned char
ただし、受信できるメッセージには 2 種類あります。1 つはヘッダーがあり、もう 1 つはヘッダーがありません。このロジックはすでに書かれています。
「上のレイヤー」はこのバッファーにアクセスしますが、これがヘッダーまたはヘッダーなしのメッセージであるかどうかを認識していません。
したがって、次のような関数があります。
U8BIT * fooBuffer(U8BIT * maxLength)
{
U8BIT * retval;
if( isHeaderless() )
{
retval = &(myBuffer[0]);
*maxLength = MAX;
}
else
{
retval = &(myBuffer[5]);
*maxLength = MAX - 5;
}
return retval;
}
この関数を呼び出す関数が、返されたポインタの内容を変更できないようにするにはどうすればよいですか?
はい、私はそれが常に可能であることを知っています。そして、他の人がそれを変更しようとするのを難しくしようとしないでください. を変更しようとするとコンパイラが文句を言うので、間違いを犯しにくくなるように「不可能」にしたいのですconst
。
次のように関数を宣言できますか。const U8BIT * fooBuffer(U8BIT * maxLength)