2010-08-28 41 views
8

Đây là cả câu hỏi và tham chiếu và tôi hy vọng mọi người có thể xây dựng dựa trên điều này để những người có câu hỏi tương tự có thể sử dụng lại nó.Phát hiện phiên bản trình biên dịch trong thời gian biên dịch

Làm cách nào để chúng tôi có thể phát hiện một phiên bản trình biên dịch C/C++/ObjC một cách đáng tin cậy? Bây giờ tôi biết câu trả lời cho Visual Studio và một phần biết câu trả lời cho Xcode.

Bây giờ cho trình biên dịch Visual Studio chúng tôi có _MSC_VER được định nghĩa với các giá trị:

Version 1.0 800 
Version 2.0 900 
Version 2.x 900 
Version 4.0 1000 
Version 5.0 1100 
Version 6.0 1200 
Version 7.0 1300 
Version 7.1 1310 
Version 8.0 1400 (Visual Studio 2005) 
Version 9.0 1500 (Visual Studio 2008) 
Version 10.0 1600 (Visual Studio 2010) 
Version 11.0 1700 (Visual Studio 2012) 

Bây giờ cho trình biên dịch Xcode chúng tôi có điều này xác định:

__APPLE_CC__ 

Nhưng các giá trị duy nhất tôi đã quản lý để tìm thông qua google (tài liệu Mac dường như không có các giá trị này) là:

Xcode 3.0    5465 
Xcode 3.1    5470 
Xcode 3.1 (GCC 4.2) 5553 
Xcode 3.2.3   5664 (Got this value from my own compiler) 

Có thể một yone hoàn thành danh sách này hoặc cung cấp liên kết đến một danh sách đầy đủ? Và có lẽ chúng tôi cũng có thể cung cấp thông tin cho các trình biên dịch khác.

+2

Cả Visual Studio lẫn Xcode đều là trình biên dịch - bạn không nên quan tâm đến phiên bản của chúng. – alternative

+3

@mathepic Tôi giống như một gã khổng lồ, nhưng thực sự? VS đi kèm với một phiên bản cụ thể của trình biên dịch đầu vào cho mỗi phiên bản của IDE và cho thấy phiên bản đó thông qua _MSC_VER; đó là những gì anh ta muốn –

+1

Hãy để tôi làm cho bản thân mình rõ ràng sau đó. Có, họ là cả hai IDE nhưng cả hai đều đóng gói với trình biên dịch riêng của họ, đó là những gì tôi đã nói về. Tôi hy vọng điều đó rõ ràng từ thông điệp của tôi. – Cthutu

Trả lời

1

Là một người đã chuyển hơn chia sẻ công bằng của ông 'C' xung quanh, tôi có thể thấy được bạn đang đến từ, vì vậy đây là một số để có được chúng ta bắt đầu:

Đối với sản phẩm CL/C++ của IBM:

__xlc__ - Format is V.R.M.F eg: "9.0.0.0" 
__IBMCPP__ Format is an integer as VRM eg: V9.0 is 900 
__IBMC__ - Format is an integer as VRM, 
      which indicates the level of compiler as VRM as: 
< 200 is C Set/2 
< 300 is C Set++ 
otherwise is Visual Age C++ V.M.C 

      where V=version, M=release, M=modification and F=fix level. 

Đối với Borland C:

___BORLANDC__ ?? 

Đối với GNU C:

__GNUC__ ?? 

Đối Watcon C:

__WATCOMC__ 
+0

Bạn có biết làm thế nào để có được thông tin tương tự về trình biên dịch C#? Trong VS cho C#, _MSC_VER không còn khả dụng nữa. Những gì là? –

+0

Tôi không biết bất kỳ định nghĩa trước trong trình biên dịch C# của Microsoft nhưng trình biên dịch đơn âm không có '__MonoCS__' đã cung cấp có ích .. (ohh bạn có DEBUG) –

0

Có một bảng thông tin này ở đây:

https://sourceforge.net/p/predef/wiki/Compilers/

Đáng buồn thay, Có vẻ như hệ điều hành MacOS định nghĩa __clang__, __GNUCC____llvm__ vì vậy thông tin này có thể có được một ít bối rối.

Nhưng thông thường, chỉ áp dụng một bộ thông tin.

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