Может кто-нибудь объяснить, что означает код 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.

Извините за плохое форматирование - пишу с телефона...

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