gcc格式为哈希符号+数字“#1”的预处理输出行是什么意思?

 Fate丶灬小庆_926 发布于 2023-02-14 03:21

在为CUDA编译器进行错误报告时,我最终在gcc的预处理步骤中发现了这种奇怪的行为。我目前使用gcc 4.8.2。

测试文件:test.cpp

#include 

int main()
{
    int a = 1;
    assert (a >= 0);
    assert (a
            >= 0);
}

命令

gcc -E -x c ++ -m64 -g -o“ test.cpp4.ii”“ test.cpp”

结果文件:test.cpp4.ii

# 2 "test.cpp" 2

int main()
{
    int a = 1;
    ((a >= 0) ? static_cast (0) : __assert_fail ("a >= 0", "test.cpp", 6, __PRETTY_FUNCTION__));
    ((a >= 0) ? static_cast (0) : __assert_fail ("a >= 0",
 "test.cpp"
# 7 "test.cpp" 3 4
    ,
 8
# 7 "test.cpp" 3 4
    , __PRETTY_FUNCTION__))
                 ;

多行断言似乎被不同地处理,从而导致了这些# 7 "test.cpp" 3 4行。这到底是什么意思?

更新资料

显然,gcc 4.7给出了# 7 "test.cpp"(没有最后两个数字)。

1 个回答
  • 它看起来像线标记。您可能已经注意到,原始文件和预处理文件中的行号之间没有微不足道的关系。# 7预处理输入中的表示下一行的源是原始行中的line7(名为test.cpp)。

    3 4 是标志,表示“从系统头开始的宏扩展”和 extern "C"

    GCC文档

    2023-02-14 04:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有