Visual C++和gcc一样强大吗?

cla*_*aws 9 c c++ gcc visual-c++

我对强大的定义是定制的能力.

我很熟悉gcc我想尝试MSVC.所以,我在msvc中搜索gcc等效选项.我找不到他们中的很多人.

控制输出类型

Stop after the preprocessing stage; do not run the compiler proper.
gcc: -E
msvc: ???

Stop after the stage of compilation proper; do not assemble.
gcc: -S
msvc: ???

Compile or assemble the source files, but do not link.
gcc: -c
msvc:/c
Run Code Online (Sandbox Code Playgroud)

对调试很有用

Print (on standard error output) the commands executed to run the stages of compilation.
gcc: -v
msvc: ???

Store the usual “temporary” intermediate files permanently;
gcc: -save-temps
msvc: ???
Run Code Online (Sandbox Code Playgroud)
  1. 是否有某种gcc < - > msvc编译器选项映射指南?
  2. gcc选项摘要列出了每个部分中比按类别列出的编译器选项更多的选项 .msvc中缺少许多重要且有趣的东西.我错过了什么,或者msvc实际上不如gcc强大.

CB *_*ley 26

MSVC是一个IDE,gcc只是一个编译器.CL(MSVC编译器)可以从gcc的角度执行您描述的大多数步骤.CL /?给予帮助.

例如

stdout的预处理:

CL /E
Run Code Online (Sandbox Code Playgroud)

编译没有链接:

CL /c
Run Code Online (Sandbox Code Playgroud)

生成程序集(与gcc不同,这不会阻止编译):

CL /Fa
Run Code Online (Sandbox Code Playgroud)

CL实际上只是一个编译器,如果你想看看IDE生成什么命令来编译和链接最简单的事情来查看IDE中项目的属性页面的命令行部分.CL但是,它不会调用单独的预处理程序或汇编程序,因此没有单独的命令可供查看.

因为-save-temps,IDE执行单独的编译和链接,因此无论如何都会保留目标文件.要保留预处理器输出和汇编器输出,您可以启用/P/Fa通过IDE.

gcc并且CL不同但我不会说MSVC缺乏"很多东西",当然不是你想要的输出.


Dea*_*ing 10

对于-E的等价物,cl.exe具有/ P(它不会"在预处理阶段后停止",但它会将预处理器输出输出到文件,这在很大程度上是相同的).

对于-S,它有点模糊,因为"编译"和"组装"步骤发生在多个地方,具体取决于您指定的其他选项(例如,如果您打开了整个程序优化,则不会生成机器代码直到链接阶段).

对于-v,Visual C++与GCC不同.它直接在cl.exe(和link.exe)中执行编译的所有阶段,因此没有"命令执行"显示.同样对于-save-temps:因为一切都发生在cl.exe和link.exe中,所以唯一的"临时"文件是cl.exe生成的.obj文件,无论如何它们总是被保存.

但最终,GCC是一个开源项目.这意味着任何有痒痒的人都可以添加他们喜欢的命令行选项,但阻力相对较小.对于商业闭源产品Visual C++,每个选项都需要有商业案例,设计会议,测试计划等.每个新功能都以零下100点开头.

  • 我怀疑每个人都只需要添加一个命令行选项 - 它仍然是一个稳定的软件项目,维护人员需要避免已经复杂的代码中不必要的复杂性.当然,由于新的选项*可以*在本地添加,因此更有可能进行奇怪的实验,结果证明是有用的 - 当然,这降低了包容性的障碍. (3认同)