c源文件中的反斜杠

vs91vp4v  于 2023-08-03  发布在  其他
关注(0)|答案(4)|浏览(101)

我有以下代码相同,因为它是在不同的行:

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

字符串
我不明白反斜杠在源文件中做什么?同样,为了简单地计算帧速率,我们可以做如下:

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


是否有任何具体的意图编写第一种类型的代码?

ghhaqwfi

ghhaqwfi1#

这是一个行延续转义。这意味着编译器会将下一行视为当前行的一部分。
它使你在实践中展示的代码

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

字符串
不过在这种情况下并没有真实的的必要,除非作者遵循的一些风格指南将其作为一个要求。
定义“多行”宏时需要行连续,行连续也经常用于长字符串。但除了这些地方,它没有任何真实的的用途。

swvgeqrz

swvgeqrz2#

反斜杠用于将一个长行拆分为两个短行,但不表示语句结束。这通常是在单行语句可能太长而无法阅读时执行的。

oxosxuxt

oxosxuxt3#

反斜杠是一个行继续。除了为了可读性的目的之外,它没有任何区别(对于大多数样式指南,每行80个字符通常是推荐的限制)。
参见:How can I do a line break (line continuation) in Python?

q8l4jmvw

q8l4jmvw4#

我想没有人能比标准更好地描述这一点。因此,根据C11/section 5.1.1.2p1,它总结了当你调用编译器时发生的翻译(* 编译 *,如果你愿意的话)的阶段:
1.每个紧跟着换行符的反斜杠字符(\)的示例都将被删除,从而拼接物理源行以形成逻辑源行。只有任何物理源行上的最后一个反斜杠才有资格成为这种拼接的一部分。非空的源文件应以换行符结束,在进行任何此类拼接之前,换行符前面不应紧接反斜杠字符。
因此,从您的示例中,由于反斜杠和换行符的组合,第一行最终与第二行有效地 * 拼接 *(连接)。

相关问题