【发布时间】:2020-02-05 09:32:32
【问题描述】:
我正在编写一个函数,我想接受 2 个types 参数。
-
string(char *) -
structure,其中将有 n 个元素。
为了实现这一点,我正在考虑使用简单的void * 作为参数类型。但是我不知道如何安全地验证参数是一种类型还是另一种类型。
【问题讨论】:
-
你不能!至少,您需要向函数添加第二个参数,它指示
void*指向的内容。 -
...如果您无论如何都必须添加第二个参数,您也可以编写两个单独的函数
func_str和func_struct并在编译时进行类型检查。 -
是的,这就是为什么我在想是否可以仅在一个功能中使用
-
你不能以一种安全便携的方式。如果您足够勇敢,您可以尝试使用启发式方法来尝试猜测内存的第一个字节是否看起来像您对字符的预期,但我不会称之为安全。
-
如果您只想为字符串和结构函数命名,您可以使用
_Generic宏。您还可以创建自我识别类型,例如使用tagged unions,这意味着您不能传递原始char *string。所有这些可能比它的价值更麻烦。