phù hợp trình biên dịch C Chuẩn ++ định nghĩa một __cplusplus
vĩ mô có thể được kiểm tra trong quá trình tiền xử lý để xác định dưới những tiêu chuẩn một file là được biên soạn, ví dụ:Nêu C chuẩn ++ trong nguồn trong một cách tiêu chuẩn
#if __cplusplus < 201103L
#error "You need a C++11 compliant compiler."
#endif
#include <iostream>
#include <vector>
int main(){
std::vector<int> v {1, 2, 3};
for (auto i : v){
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
câu hỏi của tôi là:
- có một cách tiêu chuẩn để chỉ ra những gì tiêu chuẩn một nguồn tập tin nên được biên soạn?
Điều đó sẽ cho phép xây dựng các công cụ để kiểm tra nguồn trước khi biên soạn để xác định tham số thích hợp cho -std=
(x của công việc mà có thể chỉ ra ngôn ngữ kịch bản/phiên bản: #!/usr/bin/env python3
).
Một tiêu chuẩn không và cách giòn tôi có thể nghĩ đến là tìm kiếm các kiểm tra tiền xử lý của __cplusplus
nhưng trong ví dụ trên tôi có thể cũng đã viết:
#if __cplusplus <= 199711L
#error "You need a C++11 compliant compiler."
#endif
do đó, viết ví dụ một regex sẽ trở nên khá phức tạp để nắm bắt tất cả các biến thể.
EDIT:
Trong khi tôi thông cảm với câu trả lời bằng cách @Gary mà gợi ý dựa trên một hệ thống xây dựng, nó giả định rằng chúng tôi thực sự sẽ có một bước xây dựng.
Nhưng bạn có thể đã ngày hôm nay:
- sử dụng một thông dịch viên để chạy một chương trình C++ sử dụng ví dụ CINT
- hoặc sử dụng nguồn để dịch nguồn bằng cách sử dụng ví dụ: rosecompiler
Câu hỏi của tôi cũng là về chỉ ra rằng nguồn là C++ và những gì phiên bản nó được dành cho (tưởng tượng ai đó đào ra mã của tôi 70 năm từ nay khi C++ có thể phổ biến như nói Cobol là ngày nay) .
Tôi đoán điều tương đương tôi sẽ tìm kiếm là C++ equiavlent của HTML: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
Không quan tâm, tại sao bạn quan tâm? Nếu bạn viết mã có khả năng biên dịch trong 98, nó phải được compilable trong 03 hoặc 11 (bạn có thể sử dụng các hàm không được chấp nhận - có khả năng), nhưng nó phải biên dịch - vì vậy mục đích là gì? – Nim
@Nim Tôi đoán là về phiên bản * tối thiểu * yêu cầu tệp. – leemes
@leemes, hãy để tôi đặt câu hỏi khác nhau, nếu một tệp cho biết nó có thể được biên dịch với 98, không 'std =' được thay đổi thành tệp đó? Nếu không, thì cách tiếp cận này không có nghĩa là IMHO, ở cấp dự án quyết định phiên bản bạn đang sử dụng, và có thể có một kiểm tra trong tệp để xử lý các trình biên dịch cũ hơn (để từ chối nếu nó quá cũ ...) – Nim