Обратная косая черта в исходном файле c

У меня есть такой же код, как и в разных строках:

frame_rate = (float)
                ( ( ( frames * media_timescale) + \   //WHY???
                    ( media_duration >> 1 ) ) /
                 media_duration);

Я не понимаю, что делает обратная косая черта в исходном файле? Также для простого расчета частоты кадров мы можем сделать следующее:

frame_rate = (float) ( (  frames * media_timescale) / media_duration);

Есть ли какое-то конкретное намерение написать первый тип кода?


person Mohan    schedule 08.02.2017    source источник
comment
Это не макрос, так что \ бессмыслен. Код был бы полностью действителен без него. Я подозреваю, что кто-то вырезал этот код из того, что когда-то было макросом, и просто оставил его как есть.   -  person WhozCraig    schedule 08.02.2017
comment
+ (media_duration >> 1) предназначен для округления значения в большую сторону, при условии, что в какой-то момент вы конвертируете результат в int.   -  person user3386109    schedule 08.02.2017


Ответы (4)


Это побег с продолжением строки. Это означает, что компилятор будет рассматривать следующую строку как часть текущей строки.

Это делает код, который вы показываете на практике,

frame_rate = (float)
                ( ( ( frames * media_timescale) + ( media_duration >> 1 ) ) /
                 media_duration);

Однако в этом случае в этом нет реальной необходимости, за исключением того, что, возможно, в каком-то руководстве по стилю, за которым следует автор, это было требованием.

Продолжение строки необходимо для определения «многострочных» макросов, а также часто используется для длинных строк. Но помимо этих мест, это не служит никакой реальной цели.

person Some programmer dude    schedule 08.02.2017

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

person ctrl-shift-esc    schedule 08.02.2017

Обратная косая черта — это продолжение строки. Это не имеет никакого значения, кроме удобства чтения (80 символов в строке обычно являются рекомендуемым ограничением для большинства руководств по стилю).

См.: Как я могу сделать разрыв строки ( продолжение строки) в Python?

person Community    schedule 08.02.2017
comment
Я удалил довольно откровенную копию чужого примера. Если вы хотите сослаться на чужую работу, пожалуйста, используйте надлежащее цитирование и указание авторства и только умеренно, чтобы поддержать свои слова. - person Martijn Pieters; 08.02.2017
comment
И я не понимаю, как ссылка на сообщение Python имеет отношение к вопросу о C. Правила логической строки Python отличаются в некоторых важных областях от правил C. - person Martijn Pieters; 08.02.2017

Я не думаю, что кто-нибудь мог бы описать это лучше, чем стандарт. Следовательно, согласно C11/section 5.1.1.2p1 , который суммирует этапы преобразования (компиляции, если хотите), которые происходят при вызове компилятора:

  1. Каждый экземпляр символа обратной косой черты (\), за которым непосредственно следует символ новой строки, удаляется, объединяя физические исходные строки в логические исходные строки. Только последняя обратная косая черта в любой физической исходной строке может быть частью такого сращивания. Исходный файл, который не является пустым, должен заканчиваться символом новой строки, которому не должен непосредственно предшествовать символ обратной косой черты до того, как произойдет любое такое объединение.

Таким образом, в вашем примере первая строка эффективно сращивается (соединяется) со второй из-за комбинации обратной косой черты и новой строки.

person autistic    schedule 30.11.2017