2014-02-05 7 views
0

У меня есть метод C++ с несколькими вложенными операторами if, которые заключены в фигурные скобки метода. При использовании подходящих фигурных скобок Gedit я проверял, чтобы все мои фигурные скобки были правильно сопоставлены.Кудрявые скобки метода не совпадают, когда код длинный

Проблема: Гедит заявил, что мои последние две фигурные скобки были «вне пределов досягаемости»!
Я проверил тот же код с помощью Geany, и он показал правильные совпадения для всех моих фигурных скобок.

Однако при компиляции локальные переменные метода, определенные в начале метода, не были распознаны в некоторых последних написанных вложенных операциях if в этом методе. Есть ли предел числовых строк, заключенных между фигурными скобками? Или существует ли ограничение вложенных «if и else if», которые могут вызвать эту проблему?

+1

Показать код. Никто здесь не имеет кристаллической чаши, чтобы увидеть проблему. – FeliceM

+0

Я не верю, что существует определенный предел для вложенных блоков, однако это действительно звучит так, как ваш код может работать с [refactorization] (http://en.wikipedia.org/wiki/ Code_refactoring). – Phylogenesis

+0

Формально нет, но тот факт, что вам нужно спросить, является явным признаком того, что ваша функция слишком длинная и сложная. – molbdnilo

ответ

1

Есть ли предел числовых строк, заключенных между фигурными скобками?

Только доступное дисковое пространство и память.

Или существует ли ограничение вложенных «if и else if», которые могут вызвать эту проблему?

То же.

Понятно, что вы ошиблись в отношении соответствия брекетов. Если у вас есть метод, который так долго, вы не можете быть уверены, реорганизовать его.

1

Есть, очевидно, ограничения, так как компилятор должен отслеживать всю информацию в памяти, а память - на уровне . У меня на самом деле была ошибка с памятью с g ++ (с машинным кодом ). Однако при достижении предела должно произойти ошибка компиляции .

Практически для рукописного кода вы можете считать, что не ограничено на современной машине. Обычно у вас не должно быть более десяти или пятнадцати строк в функции (хотя есть есть исключения), и вы не должны встраивать более двух уровней. Конечно, один из тех случаев, когда несколько линий может быть оправдано длинная последовательность if/else if, и в случае if/else if, компилятор видит больше уровней вложенности , чем вы. Но я бы все же ожидал, что современный компилятор на станет современной машиной для обработки пары сотен if/else if без проблем.

0

Этот вопрос обсуждался здесь: http://ubuntuforums.org/showthread.php?t=1175657

Кажется, что действительно существует ограничение на количество символов, которые разыскиваются для поиска соответствия.