Фигурные скобки метода не совпадают, когда код длинный

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

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

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

3 ответа

Существует ли ограничение на количество числовых кодов, заключенных в фигурные скобки?

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

Или есть ли предел вложенных выражений "если и еще, если", которые могли бы вызвать эту проблему?

То же самое.

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

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

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

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

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

Другие вопросы по тегам