Фигурные скобки метода не совпадают, когда код длинный
У меня есть метод C++ с несколькими вложенными "операторами if", которые заключены в фигурные скобки метода. При использовании соответствующих фигурных скобок Gedit я проверял, чтобы все мои фигурные скобки были правильно сопоставлены.
Проблема: Гедит заявил, что мои последние две фигурные скобки были "вне диапазона"!
Я проверил тот же код, используя Geany, и он показал правильные совпадения для всех моих фигурных скобок.
Однако при компиляции локальные переменные метода, определенные в начале метода, не были распознаны в некоторых последних записанных вложенных выражениях "if" внутри метода. Существует ли ограничение на количество числовых кодов, заключенных в фигурные скобки? Или есть ли предел вложенных выражений "если и еще, если", которые могли бы вызвать эту проблему?
3 ответа
Существует ли ограничение на количество числовых кодов, заключенных в фигурные скобки?
Доступно только дисковое пространство и память.
Или есть ли предел вложенных выражений "если и еще, если", которые могли бы вызвать эту проблему?
То же самое.
Очевидно, что вы ошибаетесь по поводу соответствия брекетов. Если у вас есть такой длинный метод, вы не можете быть уверены, рефакторинг его.
Эта проблема обсуждалась здесь: http://ubuntuforums.org/showthread.php?t=1175657
Кажется, действительно существует ограничение на количество символов, которые ищут для поиска соответствия.
Очевидно, существуют ограничения, так как компилятор должен отслеживать все в памяти, а память ограничена. У меня на самом деле была ошибка нехватки памяти с g++ (с машинным кодом). Однако достижение предела должно привести к ошибке времени компиляции.
Практически, для написанного от руки кода вы можете считать, что на современном компьютере нет никаких ограничений. Обычно в функции не должно быть более десяти или пятнадцати строк (хотя есть исключения), и вы не должны вкладывать более двух уровней. Конечно, одним из случаев, когда можно оправдать больше строк, является длинная последовательность if
/else if
и в случае if
/else if
компилятор видит больше уровней вложенности, чем вы. Но я все равно ожидал бы, что современный компилятор на современной машине справится с парой сотен if
/else if
без проблем.