【问题标题】:p7zip API designp7zip API 设计
【发布时间】:2016-06-06 04:32:20
【问题描述】:

maxCheckStartPosition在这里被设计成指针有什么原因吗?

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

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

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

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

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

【问题讨论】:

    标签: 7zip api-design


    【解决方案1】:

    我看不出它在 Open() 期间会发生更改的任何原因。

    除了没有看到任何原因之外,如果这样做,从合同上讲,这将是未定义的行为。它被标记为const (并且这样写,它指向的东西是 const...而不是指针)

    maxCheckStartPosition 在这里设计成指针有什么原因吗?

    在不知道具体动机的情况下:

    • 作为指针允许 NULL 是可选的,同时在非 NULL 时仍具有 UInt64 的完整范围。这可以避免需要选择一个意味着没有 maxCheckStartPosition 的“幻数”。

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

    【讨论】:

    • 谢谢。 NULL 检查对我来说很有意义。
    猜你喜欢
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多