【问题标题】:C Is there a way to get the type of the return type of a function without calling the function? [closed]C 有没有办法在不调用函数的情况下获取函数的返回类型的类型? [关闭]
【发布时间】:2021-03-07 22:06:34
【问题描述】:

我想使用 typeof 运算符来声明一个将保存函数返回值的变量。

int func(void) {
  ++counter; 
}

typeof(func()) val = func(); // side effects for calling func() twice

有没有一种方法可以在函数上使用 typeof 来获取返回类型而不调用函数?

解决方案:我的错。没有副作用。

【问题讨论】:

  • ´typeof` 还不是标准运算符。请说明您使用的工具链、您尝试过的方法以及失败的原因。
  • side effects for calling func() twice 我不明白那部分。您是否运行了可执行文件?你能显示一个minimal reproducible example,其中func() 被调用了两次吗?在 gcc 编译器中 可用typeof 确实 评估参数。我想知道-您使用什么编译器? C 中是否有 typeof 实现调用该函数?可以展示一下吗?
  • 我的错。当我尝试它时,我认为有副作用。再试一次好像没有副作用。。一定是我第一次试错了。谢谢

标签: c typeof


【解决方案1】:

不在标准 C 中,但 GCC 和 clang 提供了 __typeof__ 扩展,可以满足您的需求。

【讨论】:

    【解决方案2】:

    根据the GCC documentation,GCC typeof 扩展不会评估操作数,除非它具有可变修改的类型(一种类型是可变长度数组类型或派生自一个类型)。

    您还可以使用扩展名__auto_type 来定义一个对象,其类型由其初始化程序确定,这也避免了对可变修改类型的求值:

    __auto_type val = func();
    

    【讨论】:

      猜你喜欢
      • 2021-12-26
      • 2018-10-20
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      相关资源
      最近更新 更多