Một số định nghĩa tiền xử lý này có trong hàm WinMain và các chức năng thư viện cửa sổ khác. Mục đích của chúng là gì? Họ làm việc như thế nào? và thực hành tốt là viết chúng vào triển khai hoặc gọi hàm của bạn?Mục đích của __in __out __in_opt __allowed() là gì, chúng hoạt động như thế nào? Tôi có nên sử dụng các cấu trúc tương tự trong mã của riêng mình không?
nghiên cứu ban đầu của tôi cho thấy họ đang chỉ cần thiết lập equlivalent tới:
#define __in
#define __out
#define __in_opt
Ý nghĩa họ nhận được thay thế bằng gì trên đèo Preprocessor. Chúng chỉ là một phương pháp tài liệu, không có chức năng nào?
Nếu có, tôi có thể thấy lợi thế để ghi lại mã theo dòng như sau. Với một cái gì đó như doxygen bạn cần phải viết ra các tên tham số hai lần. Vì vậy, điều này có thể trong lý thuyết giúp giảm trùng lặp, và duy trì tính nhất quán ...
Tôi không có lý thuyết về cách __allowed()
được cho là hoạt động.
Nó không phải là một vấn đề khi các công cụ phụ thuộc vào thông tin không đáng tin cậy và không chính xác? –
Nó luôn luôn là một vấn đề khi toolds phụ thuộc vào thông tin không chính xác. Chú thích SAL không khác nhau. Đó là tất nhiên một chút rủi ro, nhưng đó là vốn có của kiến trúc khai báo/định nghĩa của C - bạn luôn phải đảm bảo rằng chúng khớp với nhau. – MSalters
@ Chú thích SAL của người dùng được kiểm tra bằng cách phân tích mã cho cả người gọi cũng như người bình thường. Các chú thích không chỉ thể hiện ý định của tác giả mà còn được xác minh (nếu có thể). Vì vậy, chúng không đáng tin cậy và không chính xác. Hãy xem xét 'void foo (_In_opt_ int * p) {* p = 42; } '.Tham số 'p' được đánh dấu là tùy chọn nhưng việc triển khai giả định rằng nó sẽ luôn hợp lệ. Phân tích mã sẽ xác định vấn đề và cung cấp thông tin chẩn đoán. – IInspectable