Может кто-нибудь объяснить, что означает код putchar('/' //*/ 1)
Я делал упражнение K&R2. Когда я читал код Бена Пфаффа на этой странице http://clc-wiki.net/wiki/K%26R2_solutions:Chapter_1:Exercise_23 я не мог понять, что представляет собой одиночный код putchar('/' //*/ 1) имею в виду. Находясь в моем компиляторе, это синтаксическая ошибка. Так может кто-нибудь объяснить это мне.
2 ответа
Если вы читаете комментарии в начале решения, это объясняет, почему вы видите эту ошибку:
Он также содержит примеры комментария, заканчивающегося звездочкой, и комментария, которому предшествует косая черта. Обратите внимание, что последний сломает компиляторы C99 и C89 с // расширениями комментариев.
В компиляторе, который не поддерживает //
стиль комментариев, это:
putchar('/' //**/
1)
Эквивалентно:
putchar('/'/1)
Что является законным - хотя и странным - выражением (помните, что в C a char
является числовым типом, так '/'/1
такой же как /
). Это происходит потому, что последовательность /**/
это пустой комментарий.
В современном компиляторе с //
комментарии стиля, выражение в конечном итоге эквивалентно:
puchar('/' 1)
Что просто ошибка.
Чтобы было понятно, исходный код помещается в несколько строк, например так:
putchar('/' //**/
1);
Отсюда, /**/ part является комментарием, поэтому после предварительной обработки код будет выглядеть так:
путчар ('/' / 1);
Который равен putchar('/');
Вы получаете ошибку компилятора, потому что вы компилируете этот код как C99 или, скорее всего, как C++, где // - однострочный комментарий. Вместо этого скомпилируйте как C89.
Извините за плохое форматирование - пишу с телефона...