预处理的 C/C++ 文件是否特定于计算机?
Is a Preprocessed C/C++ file machine-specific?
假设我在一台 Linux 机器上,我运行以下命令:
cpp main.cpp > main_p.cpp
其中main.cpp
是 c++/c 文件。我可以获取main_p.cpp
并在任何其他机器上编译/执行它吗?还是此程序编译器特定于?
Edit 1:cpp
是 C 预处理器,由cpp(1)
手册页定义。
预处理器输出非常特定于系统,尤其是在涉及标准头文件的情况下。
特别是标准头文件有很多特定于系统的东西,因为它们被认为是实现的一部分,因此可以有很多特定于实现的东西。
例如,以下程序:
#include<stdio.h>
int main()
{
printf("hellon");
return 0;
}
当通过 CentOS 7 上的预处理器时,会产生一个 843 行文件。 前几行如下所示:
# 1 "x1.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "x1.c"
# 1 "/usr/include/stdio.h" 1 3 4
# 27 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
# 375 "/usr/include/features.h" 3 4
# 1 "/usr/include/sys/cdefs.h" 1 3 4
# 392 "/usr/include/sys/cdefs.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 393 "/usr/include/sys/cdefs.h" 2 3 4
# 376 "/usr/include/features.h" 2 3 4
# 399 "/usr/include/features.h" 3 4
# 1 "/usr/include/gnu/stubs.h" 1 3 4
# 10 "/usr/include/gnu/stubs.h" 3 4
# 1 "/usr/include/gnu/stubs-64.h" 1 3 4
# 11 "/usr/include/gnu/stubs.h" 2 3 4
# 400 "/usr/include/features.h" 2 3 4
# 28 "/usr/include/stdio.h" 2 3 4
如果我获取此结果文件并尝试在 Visual Studio 中使用cl
命令对其进行编译,则会生成一长串错误。
获取原始源文件并通过 Visual Studio 预处理器运行它的输出如下所示:
#line 1 "x1.c"
#line 1 "C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\stdio.h"
#pragma once
#line 1 "C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\corecrt.h"
#pragma once
#line 1 "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\vcruntime.h"
如您所见,输出非常不同。 两个编译器都有不同的方法来表示哪个源代码行对应于预处理器输出中的给定行。 这只是差异的一个例子。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 预处理的 C/C++ 文件是否特定于计算机?
- C++检测函数是否已挂接(32 位计算机)
- CLOCKS_PER_SEC是否意味着每台计算机都会有不同的时间概念
- 计算机是否总是遵循 2 的补码方法来表示负数?
- 这是否有意义,我的计算机只能并行运行4个线程
- 我的 c++ 程序是否会从世界各地的计算机(在我的局域网之外)连接到本地 MySQL 数据库
- C++:检查计算机是否已锁定
- 静态内存地址是否随不同的计算机而变化
- 检测地址(主机)是否解析为本地计算机
- 有什么好方法可以指示计算机是否可以运行特定的程序/软件
- 如何用计算机代码检查一个无穷集在加法下是否闭合
- 如何检测计算机是否正在关闭以保存会话
- 检查Windows计算机是否通过c++连接以太网
- 是否可以在多核计算机的单核上运行多线程应用程序
- 是否在未经用户许可的情况下将数据发送到特定计算机?C++
- 有没有办法确定Windows计算机是否连接了触控板和鼠标
- 使用特定于计算机的“.file”路径 - CUDA .ptx 文件是否可移植
- 程序的调用堆栈限制在计算机之间是否完全一致