【问题标题】:How can have an argument to a function be a type? (Similar to va_arg's second argument)函数的参数怎么可能是类型? (类似于 va_arg 的第二个参数)
【发布时间】:2019-08-11 02:33:26
【问题描述】:

在可变参数函数的函数 va_arg 中,第二个参数只是“类型”。使用此函数时,示例会传递类似“int”的内容。如何在自己的函数中传递和使用类型?例如,如果我想 malloc 一块内存,以便使用括号 [] 将使用正确的偏移量到用户指定的内容,有没有办法做到这一点?

【问题讨论】:

  • va_arg 不是一个函数,而是一个宏,这通常是所有这些事情的完成方式。它们通常不是一个好主意,除非您有非常具体的理由想要这样做,并且对语言有清晰的理解以确切地知道您在做什么。
  • 我不明白你最后一句话的意思。您能否添加一个具体示例来说明您希望能够做什么?
  • 如果我 malloc 一个块,无论我将指针投射到什么位置,都将指示内存中的偏移量,如 [1] 或 [2] 返回的位置。如果我希望用户能够传递要使用的类型或字节数,有没有办法使用括号计算内存中的偏移量,或者是使用指针算法的唯一方法?
  • @nevets 使用括号 is 指针算术。 A[B] 完全等同于 *(A + B)

标签: c variadic-functions variadic variadic-macros


【解决方案1】:

函数不能。 va_arg 是一个调用大量平台特定垃圾的宏。但是你想要做的可能看起来像这样:

#define mallocT(T, n) (malloc(sizeof(T) * (n)))

其中 T 是类型参数,n 是数组大小整数参数。

【讨论】:

猜你喜欢
  • 2023-02-13
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
相关资源
最近更新 更多