【问题标题】:Why does Metal compile this recursive function?为什么 Metal 编译这个递归函数?
【发布时间】:2020-05-28 05:40:44
【问题描述】:

Metal 规范规定不允许使用递归函数。然而这编译得很好:

int b(int c) {
  if (c == 1)
    return b(c++);
  else if (c == 2)
    return b(c + 2);
  else
    return c;
}

这是为什么呢? Metal 使用的递归定义是什么?它引用了 C++14 规范的第 5.2.2 节,它也没有给出“递归”的任何定义,因此我希望上面是递归的标准示例。

即使我这样做,它仍然可以编译:

int b(int c) {
    return b(c + 2);
}

什么给了?!

【问题讨论】:

  • 如果你尝试编译一个非尾递归函数会发生什么?
  • 听起来像一个错误。如果我是你,我会直接跟进苹果,看看你是否能找出发生了什么。您还应该指定您正在使用的金属编译器(转译器?)的确切版本。

标签: gpu metal


【解决方案1】:

该函数可以像任何 C++ 函数一样编译,没问题。当你调用内核中的函数时,你会得到一个关于递归函数使用的编译错误。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多