gpt4 book ai didi

c++ - 哈希符号 + 数字 "# 1"形式的 gcc 预处理输出行是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 20:41:47 25 4
gpt4 key购买 nike

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

测试文件:test.cpp

#include <assert.h>

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<void> (0) : __assert_fail ("a >= 0", "test.cpp", 6, __PRETTY_FUNCTION__));
((a >= 0) ? static_cast<void> (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"(没有最后 2 个数字)。

最佳答案

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

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

GCC documentation

关于c++ - 哈希符号 + 数字 "# 1"形式的 gcc 预处理输出行是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20270237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com