【问题标题】:Disable tail calls to a function in Visual Studio在 Visual Studio 中禁用对函数的尾调用
【发布时间】:2016-06-10 20:42:47
【问题描述】:

如何在 Visual Studio 中禁用对特定函数的尾调用?
我需要这个的原因是因为我有一个函数会在发生错误时中断我使用的调试器,我需要查看调用它的函数。
我无法更改全局优化选项,因为没有优化项目运行太慢。

【问题讨论】:

  • 你不能使用#pragma optimize禁用对该特定功能的优化吗?
  • 您在 optimized 构建中破坏了调试器?即使您禁用尾调用递归,我也无法想象这会很有成效。为什么不在调试禁用优化的构建中进行调试,然后在代码的错误解决后打开优化(包括尾调用递归)?
  • @CodeGray:我说我无法运行调试版本,因为它太慢了。调试优化的构建非常容易。

标签: visual-studio optimization visual-studio-2015 tail-call-optimization


【解决方案1】:

(我假设您是用 C 编写的,因为您没有指明语言或提供任何代码。)

确保优化的 C 编译器不会将尾递归调用转换为跳转的一种方法是通过函数指针变量进行调用。将函数指针设置为您要递归调用的函数,将其声明为volatile 以防止优化器智取您,然后替换

return x * factorial(x-1);

static int (*volatile factorial_fp)(int) = factorial;

return x * (*factorial_fp)(x-1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-02
    • 2014-07-02
    • 1970-01-01
    相关资源
    最近更新 更多