2010-06-24 33 views
9

Định nghĩa của tôi về sức mạnh là khả năng tùy chỉnh.Có phải Visual C++ mạnh mẽ như gcc không?

Tôi quen thuộc với gcc Tôi muốn thử MSVC. Vì vậy, tôi đã tìm kiếm các tùy chọn tương đương gcc trong msvc. Tôi không thể tìm thấy nhiều người trong số họ.

kiểm soát loại đầu ra

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 

hữu ích để gỡ lỗi

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. Có một số loại gcc < -> msvc biên dịch tùy chọn lập bản đồ hướng dẫn?
  2. gcc Option Summary liệt kê nhiều tùy chọn hơn trong mỗi phần hơn Compiler Options Listed by Category. Có rất nhiều điều quan trọng và thú vị thiếu trong msvc. Tôi thiếu một cái gì đó hoặc msvc thực sự là ít mạnh hơn gcc.
+0

Đối với trường hợp 'gcc -v', tôi đoán là trình biên dịch msvc chỉ đơn giản là' cl' cho mọi thứ và nó không có các tệp nhị phân thực thi riêng biệt như gcc. –

+18

Tôi không thấy làm thế nào bạn có thể đánh đồng "mạnh hơn" với "nhiều công tắc dòng lệnh" hơn. –

+0

@Didier Trosset: trình biên dịch: cc == cl.exe, trình biên dịch: as == ml.exe, trình liên kết: ld = link.exe. Sự khác biệt là ở đây cl.exe cũng đóng vai trò 'gcc'. – claws

Trả lời

26

MSVC là một IDE, gcc chỉ là trình biên dịch. CL (trình biên dịch MSVC) có thể thực hiện hầu hết các bước mà bạn mô tả từ quan điểm của gcc. CL /? trợ giúp.

Ví dụ:

Pre-quá trình để thiết bị xuất chuẩn:

CL /E 

Compile mà không liên kết:

CL /c 

Tạo lắp ráp (không giống như gcc, tuy nhiên, điều này không ngăn chặn biên soạn):

CL /Fa 

CL thực sự chỉ là một trình biên dịch, nếu bạn muốn xem các lệnh mà IDE tạo ra để biên dịch và liên kết thứ dễ nhất để xem phần dòng lệnh của các trang thuộc tính cho một mục trong IDE. Tuy nhiên, CL không gọi một bộ xử lý hoặc bộ xử lý riêng biệt, do đó không có các lệnh riêng biệt để xem.

Đối với -save-temps, IDE thực hiện biên dịch riêng biệt và liên kết để tệp đối tượng được giữ nguyên. Để bảo toàn đầu ra của bộ xử lý trước và đầu ra của bộ xử lý, bạn có thể bật các số /P/Fa thông qua IDE.

gccCL khác nhau nhưng tôi sẽ không nói rằng MSVC thiếu "nhiều địa ngục" của sự vật, chắc chắn không phải là kết quả đầu ra mà bạn đang tìm kiếm.

3

Cả hai trình biên dịch đều có rất nhiều tùy chọn để sửa đổi ... mọi thứ. Tôi nghi ngờ rằng bất kỳ tùy chọn nào không có trong hoặc là một lựa chọn cho một cái gì đó không đáng làm ở nơi đầu tiên. Tuy nhiên, hầu hết người dùng "bình thường" không thấy sử dụng cho hầu hết các tùy chọn đó.

Nếu bạn đang xem xét hoàn toàn số lượng tùy chọn có sẵn như là thước đo "sức mạnh" hoặc "linh hoạt" thì có thể bạn sẽ tìm thấy gcc để trở thành người chiến thắng, đơn giản vì gcc xử lý nhiều nền tảng khác với Windows và các tùy chọn cụ thể cho nhiều nền tảng mà bạn rõ ràng sẽ không tìm thấy trong MSVC. gcc (well, gcc toolchain) cũng biên dịch rất nhiều ngôn ngữ ngoài C và C++; Ví dụ, gần đây tôi đã sử dụng nó cho Objective-C.

CHỈNH SỬA: Tôi với Dean khi đặt câu hỏi về tính hợp lệ của câu hỏi của bạn. Có, MSVC (cl) có các tùy chọn cho tương đương với nhiều tùy chọn của gcc, nhưng không, số lượng tùy chọn không thực sự có ý nghĩa nhiều.

Tóm lại: Trừ khi bạn đang làm điều gì đó rất đặc biệt, bạn sẽ thấy MSVC dễ dàng "đủ mạnh" trên nền tảng Windows mà bạn có thể sẽ không bỏ sót bất kỳ tùy chọn gcc nào.

+1

Tôi chỉ xem xét C/C++ ở đây. Ngay cả khi tôi loại bỏ các ngôn ngữ khác khỏi hình ảnh, có nhiều thứ còn thiếu hơn các phiên bản C/C++ khác nhau. Về "bất kỳ tùy chọn nào không có trong hoặc là một lựa chọn cho một cái gì đó không đáng làm ở nơi đầu tiên". Các tùy chọn tôi đã chỉ ra trong câu hỏi của tôi không phải là những câu hỏi hữu ích? họ có đáng làm không? – claws

+0

@claws: Các tùy chọn bạn đã chỉ ra trong câu hỏi của bạn * là * hữu ích và các câu trả lời khác đã chỉ ra tương đương cl.exe. Và các phiên bản khác nhau của C/C++ hỗ trợ tiêu chuẩn sẽ được tốt đẹp.Nhưng thôi nào, một vài nút bấm và còi gcc đang trôi dạt. Lần cuối bạn chơi với '-fschedule-insns2' khi nào? –

10

Đối với tương đương -E, cl.exe có /P (nó không "dừng sau giai đoạn tiền xử lý" nhưng nó xuất kết quả đầu ra trước một tệp, phần lớn là cùng một thứ).

Đối với -S, đó là một chút nhiễu, vì các bước "biên soạn" và "lắp ráp" xảy ra ở nhiều nơi tùy thuộc vào các tùy chọn khác bạn đã chỉ định (ví dụ: nếu bạn đã bật tối ưu hóa toàn bộ chương trình, sau đó mã máy không được tạo cho đến giai đoạn liên kết).

Đối với -v, Visual C++ không giống với GCC. Nó thực hiện tất cả các giai đoạn biên dịch trực tiếp trong cl.exe (và link.exe) nên không có "lệnh thực hiện" để hiển thị. Tương tự như vậy để tiết kiệm thời gian: bởi vì mọi thứ xảy ra bên trong cl.exe và link.exe trực tiếp, các tệp "tạm thời" duy nhất là tệp .obj mà cl.exe tạo và chúng luôn được lưu.

Vào cuối ngày, mặc dù, GCC là một dự án nguồn mở. Điều đó có nghĩa là bất kỳ ai bị ngứa để làm xước đều có thể thêm bất kỳ tùy chọn dòng lệnh nào mà họ thích với sức đề kháng tương đối ít. Đối với Visual C++, một sản phẩm nguồn đóng thương mại, mọi lựa chọn cần phải có một trường hợp kinh doanh, các cuộc họp thiết kế, các kế hoạch kiểm thử và vân vân. Every new feature starts with minus 100 points.

+1

+1: thấy điều này hữu ích. – claws

+3

Tôi nghi ngờ tất cả mọi người với một ngứa để đầu chỉ có thể thêm một tùy chọn dòng lệnh - nó vẫn là một dự án phần mềm ổn định với các nhà bảo trì cần phải tránh sự phức tạp không cần thiết trong một đoạn mã đã phức tạp. Tất nhiên, vì các tùy chọn mới * có thể * được thêm cục bộ, nhiều khả năng là các thí nghiệm lẻ sẽ được thực hiện để trở nên hữu ích - và điều đó làm giảm rào cản để đưa vào, tất nhiên. –

+1

@Eamon: đó có thể là sự thật. Quan điểm của tôi chủ yếu là Microsoft sẽ khó thêm một công tắc dòng lệnh cho một thứ gì đó mà chỉ một phần nhỏ cơ sở người dùng sẽ thấy hữu ích, trong khi đối với GCC thì nó không quá nhiều. –

Các vấn đề liên quan