首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C关键字中断

问C关键字中断
EN

Stack Overflow用户
提问于 2021-02-28 12:20:41
回答 2查看 65关注 0票数 2

让我们举两个在关键字之间使用“stuff”的例子:

代码语言:javascript
复制
#include 

int main(void)
{
    printf("OK\n");
    pri\
ntf("OK\n");             // version 1
    pri/**/ntf("Hi");    // version 2
    return 0;
}

也就是说,有一个评论

和一个

..。这两个应该如何处理,还是依赖于编译器?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-28 12:36:33

从C99

翻译阶段

翻译的语法规则之间的优先级由以下阶段指定。

如果需要,物理源文件多字节字符将以实现定义的方式映射到源字符集(引入换行符作为行尾指示符)。三元图序列被相应的单字符内部表示所取代。

的每个实例

反斜杠字符(

)

紧随其后的换行符被删除,拼接物理源代码行以形成逻辑源代码行

..。只有任何物理源行上的最后一个反斜杠才有资格成为这种拼接的一部分。非空的源文件应以换行符结尾,在任何此类拼接发生之前,换行符的前面不应紧跟反斜杠字符。

源文件被分解为预处理标记和空白字符序列(包括注释)。源文件不应以部分预处理标记或部分注释结束。

每个注释都替换为一个空格字符。

将保留换行符。除换行符之外的每个非空的空格字符序列是保留还是替换为一个空格字符,这是由实现定义的。

..。

代码语言:javascript
复制
pri\
ntf("OK\n");             // version 1

有效,因为它解析为

在上面的步骤2之后。

代码语言:javascript
复制
pri/**/ntf("Hi");    // version 2

无效,因为它解析为

在上面的步骤3之后。

票数 2
EN

Stack Overflow用户

发布于 2021-02-28 12:41:28

我将代码保存在文件a.cpp中,然后预编译代码:

代码语言:javascript
复制
gcc -E a.cpp

输出为:

代码语言:javascript
复制
int main(void)
{
    printf("OK\n");
    printf("OK\n");

    pri ntf("Hi");
    return 0;
}

第一种情况可以通过编译。但对于第二种情况,gcc将替换

设置为空,则编译将失败。

在这一点上,gcc和clang具有相同的结果。这是一个C标准。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66405799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档