使用宏来提取typeof运算符给我们的信息(用C语言)

时间:2010-12-10 18:21:48

标签: c macros typeof

我有一个问题,我不知道是否有解决方案(用C语言)......

我想组合一个带有typeof“function”的宏来获取编译时类型的名称(因为C我不使用polimorphism和其他类型的抽象,这对于编译器来说很难完成任务)。

我的问题:这似乎是不可能的,我每次都尝试,我只会获得像

这样的想法
  • “的typeof(3)”
  • “的typeof(\” 猫\ “)”
  • 编译错误......

可以这样做吗?它仅用于实验,但我认为在许多代码中使用可能会很有趣。

提前致谢:)

5 个答案:

答案 0 :(得分:3)

简短的回答:你不应该。 typeof()是C语言的GCC扩展,它不可移植。

无论如何,如果你仍想使用它,你就无法按照你的描述去做。 David Thornley的回答解释了你的原因。

答案 1 :(得分:3)

C和C ++有多个编译阶段,后期生成的信息不适用于早期阶段。宏替换相对较早,传统上是预处理器的一部分。 typeof(),如果您正在使用实现具有此类扩展的C的系统,则将适用于文字或变量的类型。在解析预处理器的内容后,该信息将在稍后阶段生成。

因此,您不会拥有可以在宏中使用的typeof()信息,并且您必须找到另一种方法来执行您想要做的事情(比如C ++模板?)。

答案 2 :(得分:0)

我假设你在谈论GCC的typeof - 构建对C的扩展。

不幸的是,我认为它不会对你要做的事情有所帮助 - 它不是一个运营商,它没有评估到某种价值。

它只能在某些情况下使用,并且(据我所知)它与预处理器无关:

  

可以在任何可以使用typedef名称的地方使用typeof-construct

答案 3 :(得分:0)

gcc有gcc typeof keyword。使用它你不再编译C,但有些不同的东西很像C但不完全是C。

使用风险自负。

答案 4 :(得分:0)

查看__typeof__运算符。

C中的MINMAX宏使用它。标准C和Objective-C。

  

MIN and MAX in C