p7zip API设计

时间:2016-02-24 03:37:46

标签: 7zip api-design

是否有任何理由将maxCheckStartPosition设计为指针?

此变量用作搜索限制,我看不出在Open()期间它会被更改的任何原因。

而且我也抓了整个库,我看不到任何Archive获取变量的所有权/更改。

这个设计决定对我来说真的很奇怪。

p7zip_9.20.1/CPP/7zip/Archive/IArchive.h:

STDMETHOD(Open)(IInStream *stream, const UInt64 *maxCheckStartPosition, IArchiveOpenCallback *openArchiveCallback) x; \

1 个答案:

答案 0 :(得分:0)

  

我没有看到在Open()期间它会被改变的原因。

除了没有看到任何理由之外,如果合同,它将是未定义的行为。它被标记为const (并且写得如此,它指向的是那个const ...而不是指针)

  

有没有理由将maxCheckStartPosition设计为指针?

不知道具体的动机:

  • 作为指针允许NULL,是可选的,同时如果非NULL则仍然具有UInt64的全部范围。这可以防止需要选择一个魔术数字"意思是没有maxCheckStartPosition。

  • 在32位体系结构中,指针在堆栈上传递的参数与64位相比意味着32位......可能有更好或更差的原因。有些人可能试图对推送的字节进行微优化,有时可能是另一个奇怪的原因,为什么你要与之交互的东西只知道如何将指针大小的东西推到堆栈中(类似FFI的东西,或某事)。