这是什么C++语言结构:#(即哈希)整数"path_to_header_or_cpp_file"<integer>?
What is this C++ language construct: # (i.e. hash) integer "path_to_header_or_cpp_file" <integer>?
我在.cpp文件中遇到了以下代码。我不明白涉及头文件的结构或语法。我确实认识到这些特定的头文件与Android NDK有关。但是,我认为这个问题是关于C++语法的一般问题。这些似乎在某种程度上是预处理器命令,因为它们以"#"开头。但是,它们不是典型的 #include、#pragma、#ifndef、#define 等命令。源文件有更多的 1000+ 这样的实例引用数百个不同的 .h、.c .cpp文件。
typedef int __time_t;
typedef int __timer_t;
# 116 "/home/usr/download/android-ndk-r8b/platforms/android-3/arch-arm/usr/include/machine/_types.h"
# 41 "/home/usr/download/android-ndk-r8b/platforms/android-3/arch-arm/usr/include/sys/_types.h" 2
# 33 "/home/usr/download/android-ndk-r8b/platforms/android-3/arch-arm/usr/include/stdint.h" 2
# 48 "/home/usr/download/android-ndk-r8b/platforms/android-3/arch-arm/usr/include/stdint.h"
typedef __int8_t int8_t;
typedef __uint8_t uint8_t;
编译器 (GCC) 似乎没有抛出与这些行相关的任何错误。但是,我想了解它们的目的和功能。谁能解释这些?
GCC预处理器的输出。这些行称为线条标记。它们具有以下语法:
# linenum filename flags
它们被解释为说以下行来自linenum
行来自filename
。它们基本上只是帮助您和编译器查看包含行的位置。这些标志提供了更多信息:
1
- 这表示新文件的开始。2
- 这表示返回到一个文件(在包含另一个文件之后)。3
- 这表示以下文本来自系统头文件,因此应禁止显示某些警告。4
- 这表示应将以下文本视为包含在隐式extern "C"
块中。
如果将 -E
标志提供给 g++,则可以通过预处理自己的程序看到此输出。
您通常会在预处理器的输出中看到类似的行(即,您通常根本不应该看到它们)。
它们类似于标准#line
指令,其形式为:
#line 42
或
#line 42 "foo.c"
编译器使用它来控制错误消息的内容。
没有line
这个词,这个:
# 42 "foo.c"
从技术上讲,它是一种非指令(只是为了增加乐趣,它是一种指令)。就C标准而言,它本质上是一个评论。猜测,gcc 的预处理器可能会发出这些指令而不是#line
指令#line
因为指令旨在作为预处理器的输入。
GCC 的预处理器将这些称为"行标记";它们在 CPP 手册中进行了讨论。它们被视为#line
指令,只是它们可以采用额外的标志参数。
预处理器倾向于引入这些指令并使用它们来指示行和文件名。C++没有定义含义,但它保留了使用
# <non-directive>
哪里不是正常指令之一的东西。编译器写入似乎已同意在这些中使用行号和文件名作为预处理文件的结果。这种用法基本上类似于所有支持 -E
选项的编译器,以指示只应处理文件。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- Linux的Cpp上的计时器
- Seg Fault Issue C++ (file IO / getline)
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- File.cpp.o:OpenPose 标志 CMakeFiles/.. 的多重定义/main.cpp.o:首先在这里定
- AWS CPP TransferManager vs GetObjectRequest Stream to File f
- 如何在安装了 WSL 的 Visual Studio Code 中修复"g++: error: helloworld.cpp: No such file or directory"?
- 在 Netbeans 中从标头切换到 cpp-File
- (公开简历)ASSERT: "false" in file qasciikey.cpp
- 从 file.cpp 到 file.o cmake 的映射
- 将CPP类(.CPP文件)转换为C结构(.c File)
- 合成 cpp :致命错误"QApplication: no such file or directory"
- emacs flycheck syntax checher for cpp file
- 如何 #include "file.cpp"
- 使用Makefile构建:即使明确指定,也会选择file.c而不是file.cpp
- 除了 clang 之外,"clang -S -emit-llvm file.cpp"运行任何其他可执行文件吗?
- 在 cpp、OpenCV 中使用"Select file"对话框创建 GUI
- File.cpp:148:错误:期望的主表达式在`.不同的符号
- c++在file.h和file.cpp中编写回调函数