簡體   English   中英

Visual C ++和gcc一樣強大嗎?

[英]Is Visual C++ as powerful as gcc?

我對強大的定義是定制的能力。

我熟悉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

對調試很有用

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: ???
  1. 是否有某種gcc < - > msvc編譯器選項映射指南?
  2. gcc選項摘要列出了每個部分中比按類別列出的編譯器選項更多的選項。 msvc中缺少許多重要且有趣的東西。 我錯過了什么,或者msvc實際上不如gcc強大。

MSVC是一個IDE,gcc只是一個編譯器。 CL(MSVC編譯器)可以從gcc的角度執行您描述的大多數步驟。 CL /? 給予幫助。

例如

stdout的預處理:

CL /E

編譯沒有鏈接:

CL /c

生成程序集(與gcc不同,這不會阻止編譯):

CL /Fa

CL實際上只是一個編譯器,如果你想看看IDE生成什么命令來編譯和鏈接最簡單的事情來查看IDE中項目的屬性頁面的命令行部分。 CL不會調用單獨的預處理程序或匯編程序,因此沒有單獨的命令可供查看。

對於-save-temps ,IDE執行單獨的編譯和鏈接,因此無論如何都會保留目標文件。 要保留預處理器輸出和匯編器輸出,可以通過IDE啟用/P/Fa

gccCL是不同的,但我不會說MSVC缺乏“很多東西”,當然不是你想要的輸出。

對於-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點開頭

兩個編譯器都有很多選項可以修改......所有內容。 我懷疑任何一種選項中都沒有的選項是首先不值得做的事情。 大多數“正常”用戶無論如何都找不到大多數這些選項的用途。

如果你純粹關注可用選項的數量作為“權力”或“靈活性”的衡量標准,那么你可能會發現gcc成為贏家,因為gcc處理Windows以外的許多平台並且具有許多特定選項您在MSVC中顯然不會找到的那些平台。 gcc(嗯,gcc工具鏈)也編譯了C和C ++之外的許多語言; 例如,我最近將它用於Objective-C。

編輯:我和Dean一起質疑你問題的有效性。 是的,MSVC(cl)有相當於許多gcc選項的選項,但不是,選項的數量並沒有多大意義。

簡而言之:除非你做一些非常特別的事情,否則你會發現MSVC在Windows平台上很容易“強大”,你可能不會錯過任何gcc選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM