多行表达式:C 编译器如何处理换行符?

问题描述 投票:0回答:2

我正在阅读 K&R 书中有关 C 的介绍部分。为了查看哪种代码格式会产生错误,我尝试将

printf("hello world!");
分成不同的行,如下所示。问题是,我不知道我的结果是否与实现无关。我用的是GCC编译器。

C 标准对多行表达式有何规定?编译器如何处理它们?

/*
    printf("hello wor
    ld!\n");
*/

/*
    printf("hello world!
    \n");
*/

    printf("hello world!\
    n");

/*
    printf("hello world!\n
    ");
*/

    printf("hello world!\n"
    );

    printf("hello world!\n")
    ;

注释掉的表达式会产生错误,而其余的则不会。

第三个表达式的行为是出乎意料的。通常

"
需要在同一行终止,但第三个表达式可以工作。

第三个表达:

    printf("hello world!\
    n");

输出到控制台:

hello world!    n

看起来

\
可以用来将一个字符串分成多行,但是
n");
之前的空格被包含在字符串中。这是标准规则吗?

c split format standards multiline
2个回答
3
投票

C 2018 5.1.1.2

118 2. 删除紧跟换行符的每个反斜杠字符 (\) 实例,拼接物理源代码行以形成逻辑源代码行。

基本上就这样写了

    printf("hello world!\
    n");

与书写相同

    printf("hello world!    n");

0
投票

任何两个连续的字符串文字将被组合。因此,这是完全有效的 C:

printf("hello world!\n"
    ""
    ""
    "next line\n"
);

...或者在多行中显示单行:

printf("h" "e"
    "llo " 
    "world!\n"
);
© www.soinside.com 2019 - 2024. All rights reserved.