C++ 17 giới thiệu thuộc tính [[maybe_unused]].
Tôi giả định đây là phiên bản tiêu chuẩn của GCC và Clang's: __attribute__((unused)).tôi có đặt [[có thể chưa sử dụng]] vào các khai báo hàm hay định nghĩa?
Đối với chức năng không sử dụng mà tôi không muốn nhìn thấy một cảnh báo từ,
tôi nên xác định các thuộc tính trên tờ khai
chức năng?
void maybe_used_function() [[maybe_unused]];
hoặc định nghĩa chức năng?
void maybe_used_function() [[maybe_unused]] {
/* impl */
}
Hoặc là một? Cả hai?
Hiệu ứng có giống nhau đối với cả thuộc tính cụ thể của trình biên dịch và chuẩn hóa không?
Tôi không thể tìm thấy bất kỳ tài liệu rõ ràng nào về hành vi vị trí và thực tiễn phổ biến là gì.
Khi tôi đặt thuộc tính trước khi cơ quan chức năng trong một định nghĩa, GCC và kêu vang cho một lỗi:
void function();
int main(){}
void function() __attribute__((unused)) {}
cảnh báo: GCC không cho phép thuộc tính 'không sử dụng' ở vị trí này trên định nghĩa hàm [-Wgcc-compat] void function() __attribute __ ((chưa sử dụng)) {
Tuy nhiên, thuộc tính có thể được đặt ở hai địa điểm khác không có lỗi:
__attribute__((unused)) void __attribute__((unused)) function() {}
Có lẽ một trong những cách này là cách tôi dự kiến sử dụng thuộc tính trên định nghĩa chức năng?
Bạn đã thử * và xem trình biên dịch thực sự nói gì? AFAIK, các thuộc tính đi trên các khai báo * chỉ *, nhưng tôi đã không kiểm tra lại văn bản chuẩn. –
@ JesperJuhl: Trình biên dịch là sai trong trường hợp này và điều này là xa lạ thường, đặc biệt là khi thảo luận các tính năng ngôn ngữ _upcoming_ có thể hoặc có thể không được triển khai đúng (hoặc ở tất cả). – ildjarn
@ildjarn lỗi GCC đến từ '__attribute __ ((chưa sử dụng))' not '[[may_unused]]'. Clang dường như cũng làm như vậy. –