如何确定变量的类型?

时间:2018-02-10 19:00:48

标签: c

我的想法是多次使用if运算符并检查每种类型:

if (the variable has type int){
      return 0;
}
if (the variable has type double){
      return 1;
} 
...

1 个答案:

答案 0 :(得分:4)

你的问题在C11中没有多大意义(详见 n1570):给定变量(或值)的类型在 compile 时间和在运行时忘记,因为声明具有某种显式类型的(全局,静态或自动)变量。还要注意calling conventionsABI定义了不同类型的数据如何以不同的方式处理(例如,传入各种不同的 processor registers或{{} 3}})。

同样,函数具有固定且定义明确的签名(您应该在声明函数时给出它,例如在某些头文件中)。

如果您将某些数据的地址作为void*形式参数(或某些数据作为可变参数)传递,则需要一些约定来获取它类型(通常,您将传递另一个描述类型的正式参数; call stackprintf是典型示例)。对于可变函数,请考虑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