【问题标题】:Method's Curly brackets do not match when code to long当代码长时方法的大括号不匹配
【发布时间】:2014-02-05 09:24:47
【问题描述】:

我有一个 C++ 方法,其中包含多个嵌套在方法的大括号中的“if 语句”。当使用 Gedit 的匹配大括号时,我正在检查以确保我所有的大括号都正确匹配。

问题:Gedit 指出我的最后两个大括号“超出范围”!
我使用 Geany 检查了相同的代码,它显示了我所有大括号的正确匹配。

但是,在编译时,在方法开头定义的方法的局部变量在后来的一些嵌套的“if 语句”中无法识别。大括号之间包含的数字行代码是否有限制?或者,是否存在会导致此问题的嵌套“if 和 else if 语句”的限制?

【问题讨论】:

  • 显示代码。这里没有人有水晶碗来解决问题
  • 我不相信嵌套块有任何指定的限制,但听起来你的代码确实可以使用refactorisation
  • 形式上不是,但你需要询问的事实清楚地表明你的函数太长太复杂了。
  • 括号之间的代码行数没有限制,“else if”阶梯也没有限制。如果可以,请尝试使用 switch-case 语句。
  • 代码不能轻易缩短。我正在加载一个链接列表,其中每个节点都有 4 个参数,A、B、C 和 D。我根据 A 的分配大小对所有节点进行排序。对于所有具有相同大小的 A,我将相同的节点排序为不同大小的 B对于 C 和 D 也是如此。所以,我有很多 if 和 else 语句。

标签: c++ gedit geany


【解决方案1】:

大括号之间包含的数字行代码是否有限制?

只有可用的磁盘空间和内存。

或者,是否存在会导致此问题的嵌套“if 和 else if 语句”的限制?

同上。

很明显,您对大括号匹配有误。如果你有一个方法太长你不能确定,重构它。

【讨论】:

    【解决方案2】:

    显然有限制,因为编译器必须跟踪 记忆中的一切,记忆是有限的。我其实已经 g++ 出现内存不足错误(机器生成 代码)。达到限制应该会导致编译时间 然而,错误。

    实际上,对于手写代码,您可以考虑 对现代机器没有限制。你通常不应该有 一个函数中超过十到十五行(尽管 有例外),你不应该嵌套超过约 两个级别。当然,可能有更多行的情况之一 be justified 是一长串if/else if,并且在 if/else if 的情况下,编译器会看到更多级别的嵌套 比你做的。但我仍然希望有一个现代编译器 一台现代机器可以处理几百个if/else if 没有问题。

    【讨论】:

      【解决方案3】:

      这里已经讨论过这个问题: http://ubuntuforums.org/showthread.php?t=1175657

      似乎确实对正在搜索以找到匹配项的字符数有限制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-21
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 2017-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多