C预处理文件中这些不熟悉的行是什么
What are these unfamiliar lines in the C preprocessed file?
这是C中Hello World程序上GNU cpp的输出。我想知道这些行是什么意思#Number Header_File_Location[Numbers]
# 1 "hello.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "hello.c"
# 1 "/usr/include/stdio.h" 1 3 4
# 27 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
# 374 "/usr/include/features.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4
# 385 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 386 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
# 375 "/usr/include/features.h" 2 3 4
# 398 "/usr/include/features.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4
# 10 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h" 1 3 4
# 11 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4
# 399 "/usr/include/features.h" 2 3 4
# 28 "/usr/include/stdio.h" 2 3 4
# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h" 1 3 4
# 212 "/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h" 3 4
typedef long unsigned int size_t;
# 34 "/usr/include/stdio.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/types.h" 1 3 4
# 27 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 28 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4
typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;
这是某种依赖关系吗?如果是,那么在什么上?行号?
来自gcc文档:
源文件名和行号信息由表单
# linenum filename flags
这些被称为线条标记。它们根据需要插入到输出中(但从不插入字符串或字符常数)。他们的意思是,下面这行起源于linenum行的文件名。filename永远不会包含任何非打印字符;它们被八进制转义所取代序列。
文件名之后出现零个或多个标志,它们是"1"、"2"、"3",或"4"。如果有多个标志,则用空格将它们隔开。这是标志的含义:
"1"这表示新文件的开始。
"2"这表示返回到一个文件(在包含另一个文件之后)。
"3"这个表示以下文本来自系统头文件,因此应抑制某些警告。
"4"这表示以下文本应被视为包装在隐式外部;C";块
这些是行号指令,并且告诉编译器翻译单元中源的下一部分来自哪行和文件。
这就是编译器在预处理后如何报告包含的头文件中的错误。
相关文章:
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- B不接受8作为输入的是什么?C++
- 为什么此指针值不能转换为整数的规则是什么?
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 并行性能不佳的原因是什么?
- std::set<Key,Compare,Allocator>::find() 函数使用"<"运算符而不是"=="运算符背后的直觉是什么?
- 初始化不是整数的巨大常量多维数组的最佳方法是什么?
- 对于指向C++类的不透明C指针,正确的typedef是什么
- boost::mpl 不使用(甚至不兼容)std::p air 的原因是什么?
- 为什么左值不能改变自己。左值用户是什么意思?
- 必须具有泛型接口的函数,但必须根据传递的子类(不知道它们是什么!)以不同的行为 - C++
- 我不断收到分段错误,但不知道是什么原因造成的
- C预处理文件中这些不熟悉的行是什么
- 我不知道是什么导致了我的代码中的分段错误
- 不确定是什么导致我的插入过载混乱
- 奇怪的循环情况,不知道是什么原因造成的
- 堆栈损坏,不知道是什么原因造成的