Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ gcc预处理的输出行格式为哈希符号+;数字“quot;”1“;什么意思?_C++_Gcc_C Preprocessor - Fatal编程技术网

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

C++ gcc预处理的输出行格式为哈希符号+;数字“quot;”1“;什么意思?,c++,gcc,c-preprocessor,C++,Gcc,C Preprocessor,在为CUDA的编译器编写错误报告时,我发现gcc的预处理步骤出现了这种奇怪的行为。我目前使用GCC4.8.2 测试文件:Test.cpp #包括 int main() { INTA=1; 断言(a>=0); 断言(a) >= 0); } 命令 GCC—E-X-C++(M64)-G-O“测试”CPP4.II“”测试CPP“< /P>” 结果文件:test.cpp4.ii #2“test.cpp”2 int main() { INTA=1; ((a>=0)?静态类型转换(0):\u断言\u失败(

在为CUDA的编译器编写错误报告时,我发现gcc的预处理步骤出现了这种奇怪的行为。我目前使用GCC4.8.2

测试文件:Test.cpp
#包括
int main()
{
INTA=1;
断言(a>=0);
断言(a)
>= 0);
}
命令

GCC—E-X-C++(M64)-G-O“测试”CPP4.II“”测试CPP“< /P>” 结果文件:test.cpp4.ii

#2“test.cpp”2
int main()
{
INTA=1;
((a>=0)?静态类型转换(0):\u断言\u失败(“a>=0”,“test.cpp”,6,“PRETTY\u函数”);
((a>=0)?静态转换(0):\u断言\u失败(“a>=0”,
“test.cpp”
#7“测试cpp”3 4
,
8.
#7“测试cpp”3 4
,uuu漂亮函数uuu)
;
多行断言的处理方式似乎有所不同,导致出现了这些
#7“test.cpp”34行。这到底意味着什么

更新
显然,GCC4.7给出了
#7“test.cpp”
(没有最后2个数字)。

它看起来像行标记。正如您可能已经注意到的,原始文件和预处理文件中的行号之间没有细微的关系。预处理输入中的
#7
表明下一行的源是原始文件中的第7行(名为test.cpp)

34
是标志,表示“从系统头进行宏扩展”和
extern“C”


非常感谢您的澄清!更多信息:存储原始行号有助于编译器生成错误消息,指示原始行号source@MattMcNabbANSI对此有多少说法?我想它属于C99中的
#非指令
语法,但是我找不到有什么语义吗?猜猜它只是没有定义,实现可以像GCC在这里那样随意扩展吗?@CiroSantilli六四事件法轮功纳米比亚胡海峰 在ISO C中,
和下一个标记之间的空格不重要,
#7
将是一个错误;因此这是一个gcc扩展(但这很好,因为它只出现在中间输出中;只要符合要求的程序仍然正确编译,就允许扩展)@Mattmcnab为什么
#非指令
语法不适用于此处?N256 6.10预处理指令。可能与
#include <assert.h>

int main()
{
    int a = 1;
    assert (a >= 0);
    assert (a
            >= 0);
}
# 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__))
                 ;