2012-06-19 32 views
8

Tôi đã gặp phải nhiều mã MATLAB có một số ý kiến ​​%#ok<SAGROW>. Nhận xét này được sử dụng trong các trường hợp khác nhau và tôi không thể hiểu được ý nghĩa của nó.% # ok <SAGROW> nhận xét có ý nghĩa gì trong MATLAB?

Như một ví dụ:

i = 1; 
flag = true; 
for l = 1:k 
    while(flag==true) 
     if(probs(i)~=0) 
      leaves(l).val = i-1; %#ok<*SAGROW> 
      leaves(l).zero = ''; 
      leaves(l).one = ''; 
      leaves(l).prob = probs(i); 
      i = i + 1; 
      flag = false; 
     else 
      i = i+1; 
      flag = true; 
     end 
    end 
flag =true; 
end 

Có tài liệu tham khảo khác để nhận xét này quá, cho instace:

Trả lời

6

Nó ngăn chặn cảnh báo mlint. Trong trường hợp cụ thể này, đó là về việc không phân bổ trước một mảng.

mlint là một trong những công cụ phân tích mã tĩnh mà Matlab có. Nó tìm thấy lỗi có thể và hiển thị cảnh báo.

Chỉnh sửa (1): Tôi vừa mới nhận thấy rằng câu hỏi của bạn là về SAGROW, không AGROW. Tôi không thể tìm thấy nó. Đoán của tôi là nó là một cú pháp cũ/mới mlint.

2

Tôi không biết về SAGROW, nhưng AGROW có nghĩa là một mảng/vector/ma trận đã cho <name> might be growing inside a loop. Consider preallocating for speed.

+0

Có 'AGROW' yêu cầu MATLAB phân bổ trước mảng/ma trận để tăng hiệu suất hay chỉ ngăn chặn cảnh báo phân bổ trước? – Isaac

+0

Chỉ cần chặn cảnh báo. – glglgl

4

General answer (cho các giá trị khác nhau trong dấu ngoặc nhọn):

Loại msgid:SAGROW trong Preferences -> Mã Analyzer.

Đối với những người khác msgid:<your-ok-msg-id>.

chỉnh sửa: cách ngắn nhất, 1. xóa nhận xét, 2. đọc chú giải công cụ codeanalyzer của đoạn mã gạch dưới.

+0

Bạn làm cách nào để đảo ngược? – Eric

+1

@Eric Nhấp chuột phải vào các từ có gạch chân màu đỏ và chọn "Supress [warning-magssage] ..." -> "Trên dòng này" sẽ cung cấp cho bạn mã thích hợp để chặn cảnh báo này. – Adiel