Вложенные комментарии в C / C++
это вопрос интервью: -
напишите программу на C, которая при компиляции и запуске распечатывает сообщение указывает, позволяет ли компилятор, с которым он компилируется, /* */ комментарии к гнездо.
решение этой проблемы приведено ниже : -
Sol: - вы можете иметь целочисленную переменную nest:
int nest = /*/*/0*/**/1;
если он поддерживает вложенные комментарии, то ответ 1, иначе ответ 0.
Как это работает ? Я не понимаю объявление переменной.
6 ответов
если компилятор не разрешает вложенность, первый */
завершит открытие многострочного комментария, что означает 0
не будет закомментирован. Написано с некоторыми пробелами:
int nest = /*/*/ 0 * /**/ 1;
в результате в коде
int nest = 0 * 1; // -> 0
если это позволяет вложенность, это будет
int nest = /*/*/0*/**/ 1;
в результате
int nest = 1;
короткий ответ на вопрос "как это работает" таков:
int nest = /*/*/0*/**/1;
с вложенными комментариями становится что-то вроде:
int nest =
// /* (comment level 1)
// /*/ (comment level 2)
// 0
// */*
// */
1;
и без лишних * делает это:
int nest =
// /*/ (comment level 1)
// */
0
*
// /*
// */
1;
или 0*1
.
или, я думаю, что это происходит, но этот вопрос в значительной степени кошмаром. Я полностью согласен с комментарием Благовест Buyukliev по.
int nest = /*/*/0*/**/1;
вложенность не допускается
если вложенность не разрешена, диапазон первого комментария:
vvvvv
int nest = /*/*/0*/**/1;
с удаленным комментарием (пробел, оставленный для читаемости-препроцессор C++ заменяет одно пространство, не уверен в C), следующий комментарий:
vvvv
int nest = 0*/**/1;
С этим также удаляется:
int nest = 0* 1;
вложенности допускается
ниже |+-
строка показывает область внешнего комментария и vvvvvv
указывает на тех. объем внутреннего комментария.
+---------+
| |
| vvvvvv |
int nest = /*/*/0*/**/1;
С этими комментариями удалено:
int nest = 1;
если он поддерживает вложенные комментарии, то у вас будет (зачистка комментариев):
int nest = 1;
Если это не так, то у вас будет (зачистка комментариев):
int nest = 0 * 1;
это большой мешок отвратительной боли. Я предполагаю, что третий /
возможно, отменяет второй многострочный блок комментариев, отображая *
после нуля умножение, следовательно:
/* */0 * /* */ 1 == 0 * 1 == 0 // ==> nested comments aren't supported.
если компилятор понимает вложенные комментарии, он просто удалит /*/*/0*/**/
часть и оставить вас с int nest = 1
.
в противном случае, он будет видеть int nest = 0*1
и 0 * 1 == 0
.