c源文件中的反斜杠

Backslash in c source file

我在不同的行上遵循相同的代码:

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

我不明白反斜杠在源文件中的作用? 同样要简单地计算帧速率,我们可以执行以下操作:

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

写第一类代码有什么具体意图吗?

这是一个 line-continuation 逃脱。这意味着编译器会将下一行视为当前行的一部分。

它使你在实践中展示的代码成为

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

虽然在这种情况下并没有真正需要它,但可能一些 style-guide 之后作者将它作为一个要求。

定义"multi-line"宏需要换行,也常用于长字符串。但除了那些地方,它没有任何实际用途。

反斜杠用于将一长行分成两段较短的行,而不表示语句结束。当单行语句可能太长而无法阅读时,通常会这样做。

反斜杠是续行。除了可读性目的外,它没有任何区别(每行 80 个字符通常是大多数样式指南的推荐限制)。

参见:How can I do a line break (line continuation) in Python?

我认为没有人能比标准更好地描述这一点。因此,根据 C11/section 5.1.1.2p1,它总结了调用编译器时发生的翻译阶段(编译,如果你愿意):

  1. Each instance of a backslash character (\) immediately followed by a new-line character is deleted, splicing physical source lines to form logical source lines. Only the last backslash on any physical source line shall be eligible for being part of such a splice. A source file that is not empty shall end in a new-line character, which shall not be immediately preceded by a backslash character before any such splicing takes place.

因此,根据您的示例,由于反斜杠和换行符的组合,第一行最终有效地 与第二行拼接(连接)。