Từ cpp thủ gnu ...
__GNUC__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__
Những macro được định nghĩa bởi tất cả các trình biên dịch GNU mà sử dụng tiền xử lý C: C, C++, Objective-C và Fortran. Giá trị của chúng là phiên bản chính, phiên bản nhỏ và mức bản vá của trình biên dịch, dưới dạng hằng số nguyên. Ví dụ: GCC 3.2.1 sẽ xác định __GNUC__
thành 3, __GNUC_MINOR__
thành 2 và __GNUC_PATCHLEVEL__
thành 1. Các macro này cũng được xác định nếu bạn gọi trực tiếp bộ xử lý trước.
__GNUC_PATCHLEVEL__
là mới đối với GCC 3.0; nó cũng có mặt trong các ảnh chụp nhanh phát triển được sử dụng rộng rãi dẫn đến 3.0 (tự xác định là GCC 2.96 hoặc 2.97, tùy thuộc vào ảnh chụp bạn có). Nếu tất cả những gì bạn cần biết là liệu chương trình của bạn có đang được biên soạn bởi GCC hay một trình biên dịch không phải GCC tuyên bố chấp nhận các phương ngữ GNU C, bạn có thể chỉ cần thử nghiệm __GNUC__
. Nếu bạn cần viết mã phụ thuộc vào một phiên bản cụ thể, bạn phải cẩn thận hơn.Mỗi khi phiên bản nhỏ được tăng lên, mức bản vá được đặt lại về 0; mỗi khi phiên bản chính được tăng lên (điều này hiếm khi xảy ra), phiên bản nhỏ và mức bản vá được đặt lại. Nếu bạn muốn sử dụng các macro được xác định trước trực tiếp trong điều kiện, bạn sẽ cần phải viết như sau:
/* Test for GCC > 3.2.0 */
#if __GNUC__ > 3 || \
(__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \
(__GNUC_MINOR__ == 2 && \
__GNUC_PATCHLEVEL__ > 0))
có thể trùng lặp của [Làm cách nào để kiểm tra phiên bản hiện tại của GCC?] (Http://stackoverflow.com/questions/259248/how-do-i-test-the-current-version-of-gcc), cả hai loại chung C/C++ –