Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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++ C++;编译器差异_C++_Compiler Construction - Fatal编程技术网

C++ C++;编译器差异

C++ C++;编译器差异,c++,compiler-construction,C++,Compiler Construction,VC++.net编译器(cl.exe/EHsc)和GCC编译器有什么不同,编译,比如说这个程序: #include <iostream> using namespace std; int main(){ unsigned int test; cin >> test; cout << test; return 0; } #包括 使用名称空间std; int main(){ 无符号整数检验; cin>>试验; coutG++无法编译.net代码(因为您

VC++.net编译器(cl.exe/EHsc)和GCC编译器有什么不同,编译,比如说这个程序:

#include <iostream>
using namespace std;

int main(){
 unsigned int test;
 cin >> test;
 cout << test;
 return 0;
}
#包括
使用名称空间std;
int main(){
无符号整数检验;
cin>>试验;

coutG++无法编译.net代码(因为您提到了VC++.net)


它们是完全不同的,因为它们是由不同的哲学团体开发的。

< P> GCC是指GNU编译器集合,它是编译器和链接器集合的前端。编译C++时,通常调用G++。 至于g++和VC++,它们是完全不同的编译器,因此有很多不同之处

例如,它们将以不同的方式优化代码,它们可能会有细微的语法差异,因为没有正确遵循标准、不同的库、不同的头、不同的实现等等


g++可用于编译各种不同平台上的项目,而VC++仅用于编译Windows平台上的程序。

GCC将编译源代码并将其链接到该格式和一系列其他格式中(请参见我答案的注释),而VC++将编译并链接到该格式中


**编辑我的错误,GCC也将在windows的PE格式下编译。我忘记了这一点,我认为,不同的运行时库。

编译器之间的差异太多,无法用一个简单的答案来全面描述,但这里有几个:

  • 我假设您正在比较msvc和mingw32 gcc(两者都可以生成win32可执行文件)。msvc有不同的链接器选项(MT、MD、ML、LD),它们将可执行文件链接到运行时的共享/静态和线程/非线程版本,包括stdc++runtime.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上用/FAs编译

    试着在Linux上运行.exe来找出答案。你知道什么是机器语言吗?什么是汇编程序以及它与机器语言的关系如何?你至少对一些机器语言有点熟悉吗?如果没有与这些主题的联系,你的问题的答案对我来说就没有什么价值了OU:非常流行的POP-SIC.GC.exe会,如果你让它检测语言或告诉它编译C++,在这种情况下它充当G++.ex. GCC不是C编译器,它是整个GNU编译器集合。不一定。GCC也可以用于Windows平台,在那里它将程序链接到exe。不真实:GCC也可以产生。PE文件(--mingw*目标)这不完全正确。GCC将编译为其目标平台上本机支持的任何格式。为Win32目标配置的GCC将使用PE格式(无论它使用Cygwin还是mingw运行时)为MS-DOS或某些Unix平台配置的.GCC将生成COFF格式。实际上,它可以生成binutils编译的任何内容。