在 C 中调用函数时 \ 是什么意思?

XuC*_*hen 4 c preprocessor preprocessor-directive

我正在查看一些代码,发现它在调用函数时使用 \ 来分隔行,这是否意味着什么?还是只是为了更具可读性?

        function(\
        lets_say_this_a_long_attribute, \
        and_this_is_another_attribute_with_a_long_name_or_operations, \
        attribute);
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 9

来自 C 标准(5.1.1.2 翻译阶段

  1. 每个反斜杠字符 () 后面紧跟一个换行符的实例都被删除,拼接物理源代码行以形成逻辑源代码行。只有任何物理源代码行上的最后一个反斜杠才有资格成为这种拼接的一部分。非空的源文件应以换行符结尾,在任何此类拼接发生之前,该换行符之前不应紧跟反斜杠字符。

例如这些物理线路

i\
n\
t\
 x;
Run Code Online (Sandbox Code Playgroud)

形成逻辑线

int x;
Run Code Online (Sandbox Code Playgroud)

这是一个演示程序。

#include <stdio.h>

int main(void) 
{
    i\
n\
t\
 x = 10;

    p\
r\
i\
n\
t\
f
    ( "%d\n", 
    x );

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它的输出是

10
Run Code Online (Sandbox Code Playgroud)

这种技术用于编写宏,例如#define。

  • @machine_1:代码混淆器通常会这样做,将 N 个字符长的行截断,然后简单地在一行末尾添加一个反斜杠,然后继续下一行。但你是对的——没有恶意的理智程序员不会这样做。请注意,三字母组是在第 2 阶段之前处理的;它们不能跨行分割(但“??/”可能出现在行尾以指示反斜杠换行符对)。 (4认同)
  • 好答案。我只是错过了一点:任何“#define”都由其后的第一个逻辑换行符终止,这使得在不使用“\-”将多个物理行连接到单个逻辑行的情况下编写多行宏是不可能的&lt;换行符&gt;`序列。这也是供人类使用的程序中唯一有效的用途。 (3认同)
  • 它发生在处理的早期,您可以使用反斜杠换行符对分割注释开始和结束符号。 (2认同)