Есть ли негативный результат от записи тела функции на отдельной строке? - PullRequest
0 голосов
/ 02 сентября 2010

Я рассматриваю нашу базу кода Visual C ++ и вижу множество вспомогательных функций с очень короткими телами.Например, это:

inline int max( int a, int b ) { return a > b ? a : b; }

проблема в том, что когда отладчик кода отлаживается, невозможно сразу увидеть, что такое a и b при входе в функцию с помощью F11 («шаг в»)).Просто нажмите F11, и указатель «текущей строки» указывает на строку с открывающей фигурной скобкой, затем после F10 («шаг за шагом») управление выходит из функции.Это не очень удобно.

Альтернативой было бы переписать все эти функции так, чтобы полезная нагрузка тела занимала отдельную строку:

inline int max( int a, int b )
{
    return a > b ? a : b;
}

теперь, когда нажата клавиша F11, указатель "текущей строки"указывает на открывающую скобку, затем после того, как управление F10 переходит на полезную нагрузку, и можно увидеть, что имеют значения a и b.Если кому-то все равно, и он только что вошел в эту функцию во время вычисления какого-либо сложного выражения, он может нажать Shift-F11 и выйти из функции - но он мог бы сделать это и в первом случае, так что никаких серьезных отрицательных моментов нет.изменения в опыте отладки.

Есть ли недостатки в таком преобразовании кода?Какие-либо причины держать тело функции в одной строке с сигнатурой функции?

Ответы [ 6 ]

3 голосов
/ 02 сентября 2010

Нет никакой разницы в скомпилированном коде между двумя способами форматирования вашего кода.

Пойдите с тем, что когда-либо облегчает отладку / обслуживание / понимание.

В этом случае онкод в отдельной строке.

2 голосов
/ 02 сентября 2010

IME, вы будете продолжать сталкиваться с этим, независимо от того, сколько тел функций вы изменяете (тем самым сбивая с толку всех, кто пытается просмотреть свои изменения в SVN или что бы вы ни использовали).Просто слишком распространено соглашение о кодировании, чтобы полностью исключить его из достаточно большой кодовой базы.
И даже если вам удастся исправить все эти определения функций (что из моего POV представляет собой кодирование), вы все равно столкнетесь скод типа f(g()+h(), i()), где вы хотите отладить вызов f() без необходимости проходить через g(), h() и i().По сути, это та же проблема: некоторый код помещен в одну строку, и вы хотите отладить только его часть.Вы предлагаете также изменить ( uglify ) весь такой код?
Вам лучше научиться справляться с этим.

Способ, которым я справляюсь с этим в VS, состоит в том, чтобы запустить окно ЦП через любой ярлык, на который настроена ваша IDE (для меня это Alt + 8 ), и выполнить сборкуинструкции отображаются там достаточно далеко, чтобы установить кадр стека.Если вы оставите окно наблюдения «Locals» открытым, вы будете «достаточно далеко», когда появятся локальные переменные.Через некоторое время вы научитесь читать машинные инструкции достаточно хорошо, чтобы судить об этом, просто взглянув на код ассемблера.

2 голосов
/ 02 сентября 2010

Из того, что я знаю, компиляторы C / C ++ игнорируют пробелы, поэтому запись тела функции в другую строку только для лучшей читабельности кода.

2 голосов
/ 02 сентября 2010

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

0 голосов
/ 02 сентября 2010

Я не могу воспроизвести вашу проблему.В Visual Studio 2008, если я вхожу в эту функцию с помощью F11, указатель текущей строки указывает на однострочник, и я вижу значения a и b.

Какую версию Visual Studio вы используете?

Что касается вашего вопроса, это чисто субъективно.Лично я предпочитаю, чтобы однострочники были на одной линии.Но это только я, мне нравится, чтобы на экране всегда было как можно больше кода.

0 голосов
/ 02 сентября 2010

Вы устанавливаете точку останова, нажимая на левую часть окна кода?Попробуйте навести курсор на оператор возврата и вместо этого нажать соответствующую комбинацию клавиш, например, F9.В качестве точки останова должен быть выбран только один оператор, так же как и целая строка во втором примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...