我的想法是多次使用if
运算符并检查每种类型:
if (the variable has type int){
return 0;
}
if (the variable has type double){
return 1;
}
...
答案 0 :(得分:4)
你的问题在C11中没有多大意义(详见 n1570):给定变量(或值)的类型在 compile 时间和在运行时忘记,因为声明具有某种显式类型的(全局,静态或自动)变量。还要注意calling conventions和ABI定义了不同类型的数据如何以不同的方式处理(例如,传入各种不同的 processor registers或{{} 3}})。
同样,函数具有固定且定义明确的签名(您应该在声明函数时给出它,例如在某些头文件中)。
如果您将某些数据的地址作为void*
形式参数(或某些数据作为可变参数)传递,则需要一些约定来获取它类型(通常,您将传递另一个描述类型的正式参数; call stack或printf
是典型示例)。对于可变函数,请考虑scanf
工具。
也许您想要考虑stdarg.h
与宏中使用的_Generic
。这是我很少使用的功能。
也许您想要通过某些generic selection自定义GCC编译器。这可能需要数月的工作(并且取决于您特定版本的GCC)。
也许你想要一些GCC plugin或和类型。您通常会使用包含枚举数(选择类型)和struct
的{{1}}来实现tagged union。如需了解灵感,请查看abstract data type,并且由于Glib为Glib's GVariant,请研究其源代码。
也许你可能想看看free software。
如果您(特别)使用libffi,请考虑一些GCC(在C11标准之外)。您可能需要C language extensions或某些typeof
,例如union
。
最后,您可能生成某些C文件,可能使用您的脚本,另一个预处理器,如GPP或m4等......
您应该详细描述您的实际问题。在初始形式中,您的问题通常是一些builtins。