VC++.net编译器(cl.exe /EHsc)和GCC编译器有什么区别,编译来说,就说这个程序:
#include <iostream>
using namespace std;
int main(){
unsigned int test;
cin >> test;
cout << test;
return 0;
}
我知道vc++编译器编译成exe,gcc编译成linux可执行文件,仅此而已。但真正的区别是什么?
编辑:我将差异降至较低水平。让我说得更清楚一些。同一个程序在同一平台上用2个不同的C++编译器编译有什么区别(win或linux没关系)。
GCC 的意思是GNU 编译器集合,它是编译器和链接器集合的前端。 编译 C++ 时通常会调用 g++。
至于 g++ 与 VC++,它们是完全不同的编译器,因此存在很多差异。
例如,他们会以不同的方式优化代码,由于不正确遵循标准、不同的库、不同的标头、不同的实现等,他们可能会存在细微的语法差异...
g++可以用来编译各种不同平台上的项目,而VC++只能编译Windows平台的程序。
我认为,不同的运行时库。
G++ 无法编译 .net 代码(因为你提到了 VC++.net)。
它们是完全不同的,因为它们是由具有不同理念的不同群体开发的。
编译器之间的差异太多,无法在 SO 答案中全面编写,但这里有一些:
我假设您正在将 msvc 与 mingw32 gcc 进行比较(两者都可以生成 win32 可执行文件)。 msvc 有不同的链接器选项(MT、MD、ML、LD),它们将可执行文件链接到运行时的共享/静态和线程/非线程版本,包括 stdc++ 运行时。 MinGW (gcc) 静态或动态链接到它自己的运行时 libgcc* 以及它的 libstdc++。 MinGW 还将链接到 Windows 的 msvcrt.dll 及其中的函数,但需要提供一些更多静态链接的功能,从而导致二进制文件更大一些。如果您要将 Linux gcc 与 Windows msvc 进行比较,请阅读 PE 和 ELF 文件格式。
优化例程完全不同。阅读文档中的内容
后端工具完全不同; MSVC 使用(其中包括 masm、link、cl),而 gcc 使用 gcc、g++、cc1、cc1plus(和 binutils)等内容。
异常处理:MSVC是异常处理类型的创建者,因此它自然有“最佳”的处理方式。 GCC/MinGW 正在迎头赶上,希望 4.6 版本将具有结构化异常处理(正在进行中)。
还有很多很多,但我现在能想到的就这些了。
您可以通过查看编译器生成的汇编器来准确了解编译器生成的内容。
在 VC++ 或 gcc -S 上使用 /FA 进行编译