说我有两个“模块”。例如,RS-232 端口的硬件接口层及其上方的一层使其更加抽象。
我有一个这样的接收缓冲区:U8BIT myBuffer[MAX]
. U8BIT
是类型化的:typedef unsigned char
然而,可以接收两种类型的消息。一个有标题,另一个没有标题。这个逻辑已经写好了。
“上面的层”将访问此缓冲区,但它不应该知道这是一个标头还是无标头消息。
因此我有这样的功能:
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)