gpt4 book ai didi

c - API 返回结构

转载 作者:行者123 更新时间:2023-12-04 10:32:23 25 4
gpt4 key购买 nike

在以下情况下最好的解决方案是什么:

  • 我们的 API 返回一个结构给用户
  • 我们希望用户能够阅读其内容
  • 我们不希望用户更改它,因为它可能会传递给其他一些 API 函数并且它的内容应该是正确的?
  • 最佳答案

    您的函数可以返回指向 const 结构的指针。然后:

  • 不允许调用者通过指向 const 结构的指针来修改结构。 C 实现应该强制执行此规则。
  • 如果调用者将指向 const 结构的指针传递给 API 中的另一个函数,则 C 规则允许该函数将指向 const 结构的指针转换为指向非 const 结构的指针。如果结构不是 定义 是 const (例如,它被创建为非常量,但指向它的指针被转换为指向 const 结构的指针),则允许函数通过新转换的指向非常量结构的指针修改结构.
  • C 规则还允许调用者进行同样的转换和修改。显然,调用者不应该这样做,而你是在依靠他们的善意不这样做。因此,该技术可以防止通过返回的指针进行无意修改,但不能防止通过转换后的指针进行恶意修改。

  • 更进一步,您可以只向调用者提供结构的不完整声明,即仅显示其名称(如 struct foo; )并且不定义其内容(如 struct foo { int x;… }; )。当调用者只有一个不完整的结构声明时,他们可以接收一个指向该结构的指针,并可以将它存储并作为参数传递,但他们不能使用它来访问该结构(除非通过异常方式,例如转换它指向另一个类型的指针或通过提供自己的结构定义)。

    如果调用者只有一个不完整的结构声明,但必须能够使用结构的内容,则必须提供额外的函数来接受指向结构的指针作为参数并从结构内部返回信息。

    关于c - API 返回结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18205906/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com