Опасность использования вложенных комментариев для быстрой (де) активации блоков кода в C ++ - PullRequest
3 голосов
/ 11 июля 2011

В настоящее время я использую вложенные комментарии, чтобы быстро активировать / деактивировать код во время тестирования, способ, которым я делаю это, выглядит так:

//* First Case, Activated
DoSomething();
/**/

/* Second Case, De-Activated
DoSomethingElse();
/**/

Я могу активировать, деактивировать блоки кода, просто добавивили удаление '/'.

Компилятор предупреждает меня об этом, поскольку вложенные комментарии плохие , но на самом деле опасно ли использовать эти комментарии?

Ответы [ 5 ]

12 голосов
/ 11 июля 2011

Вот как люди обычно делают это:

#if 0
//...
#endif

или

#define TESTWITH

#ifdef TESTWITH
//..
#endif
0 голосов
/ 11 июля 2011

Вот как вы можете попасть в беду:

//* First Case, Activated
DoSomething();
/**/

/* Second Case, De-Activated
/* Comment about DoSomethingElse */
DoSomethingElse();
/**/

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

Конечно, этого можно избежать, никогда не используя комментарии в стиле /**/, и это зависит от вашей среды, если это разумно. А редактор с подсветкой синтаксиса (даже включая редактор ответов Stack Overflow) подскажет вам, что происходит. Но зачем вводить такую ​​возможность?

Это также относится к категории "симпатичных". Вы смешиваете два разных синтаксиса комментирования. Пока все понимают, что происходит и играют по правилам, у вас все будет хорошо. Но как только кто-то не попадает в беду.

0 голосов
/ 11 июля 2011

Почему вы чувствуете необходимость так часто включать и выключать блоки кода?Скорее всего, вы делаете что-то не так на более высоком уровне.

Возможно, вам следует использовать контроль исходного кода и просто создать две (или более) ветви для тестирования различных версий вашего кода.

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

0 голосов
/ 11 июля 2011

Не прямой ответ, но вы рассматривали вместо этого #ifdef?

#define DOSOMETHING

#ifdef DOSOMETHING
DoSomething();
#else
DoSomethingElse();
#endif
0 голосов
/ 11 июля 2011

Да, вы часто заканчиваете комментированием или комментированием, и получаете код, отличный от ожидаемого, и это делает отладку очень запутанной. Использование // гораздо надежнее для этого - вам придется печатать больше, но это более предсказуемо.

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