2013-06-05 37 views
10

Chúng tôi có một dự án sử dụng CDT trong Eclipse. Đó là một dự án cũ mà chúng ta vừa nhập vào Eclipse, và tôi muốn đảm bảo chúng ta bắt đầu sử dụng phân tích mã tĩnh để tìm ra bất kỳ sự kỳ quặc nào.Làm cách nào để tắt cảnh báo phân tích mã tĩnh trên cảnh báo dòng trong CDT (mã C)?

Vấn đề là, có một loạt các dòng kích hoạt cảnh báo mà chúng ta muốn bỏ qua, với những dòng chính là phần tử trong các câu lệnh switch.

Tôi biết cách thực hiện điều này cho lint, nhưng còn về CDT thì sao? Có một bình luận một dòng mà tôi có thể đặt ngay trên dòng?

Ví dụ: ("Không phá vỡ vào cuối vụ án")

case enChA: 
    nChannel++; 
    // I want to ignore this fallthrough  
    case enChB:  
    nChannel++; 
    // And this one... 
    case enChC: 
    nChannel++; 
    // And this one... 
    case enChD: 
    nChannel++; 
    // do some more stuff... 
    break; 
+0

Câu hỏi này sẽ thu hút sự quan tâm nhiều hơn với tiêu đề mô tả hơn đề cập đến việc ngắt ở cuối một trường hợp trong câu lệnh chuyển đổi. –

+0

@CraigMcQueen, Cảm ơn mẹo, nhưng tôi đã thực sự hỏi về cách tắt phân tích mã tĩnh trên từng dòng. Việc phá vỡ chỉ là một ví dụ cụ thể về một cảnh báo mà tôi muốn tắt. Mọi người đều tập trung vào ví dụ, nhưng đó không thực sự là câu hỏi ban đầu. –

Trả lời

21

Bạn nên cố gắng

//no break 

trước khi vụ án tiếp theo.

+0

Tôi chấp nhận câu trả lời của bạn, nhưng tôi cũng muốn bỏ qua một số "khai báo biến không sử dụng". Có lời khuyên nào để làm điều đó không? –

+0

Cảm ơn. Hoạt động cũng như '/ * no break * /' hoặc '/ * không ngắt ở cuối của trường hợp * /'. (Tôi không thể sử dụng '//' bình luận vì tôi bị giới hạn ở C89.) –

+0

Tôi chắc chắn sẽ tò mò muốn biết tại sao các loại hạt tê tại nhật thực quyết định "không nghỉ" tốt hơn so với tuổi * 30 * " FALLTHROUGH ". Họ đang nghĩ gì vậy? –

3

Giải quyết.

Tôi vừa thêm văn bản từ cảnh báo mà tôi muốn bỏ qua ngay lập tức ở trên nơi ngắt.

Như thế này:

 case enChC: 
     ++nChannel; 
     //No break at the end of case 
     case enChD: 
     ++nChannel; 
+2

bạn có thể kiểm tra xem nó hoạt động đơn giản với "không nghỉ"? – gkovacs90

+1

Tôi đến đây với cùng một vấn đề. Tôi sẽ không bao giờ tìm thấy thiết lập này nếu không có SE. Theo mặc định trong Eclipse, nếu bạn có chuỗi chính xác là "no break" ở bất cứ đâu trong một chú thích, nơi một ngắt sẽ bình thường (ngay trước câu lệnh case kế tiếp), nó sẽ loại bỏ cảnh báo. Nó không phải là trường hợp nhạy cảm và thậm chí "Hãy cho tôi một máy cắt tê giác" hoạt động! LOL – dslake

-3

Để tắt thông báo khó chịu, bạn cần phải đi đến Preferences-> C/C++ -> Editor, và sau đó bỏ chọn các tùy chọn mà nói "Highlight đang không hoạt động", "Display vấn đề khi bạn gõ ", vv Hy vọng điều này sẽ giúp.

+3

Đây không phải là điều tôi muốn. Tôi muốn tắt các trường hợp cụ thể của từng cảnh báo, không phải tất cả các trường hợp. Cảnh báo phiền phức là quan trọng bởi vì, ví dụ, đôi khi bạn muốn rơi qua một trường hợp, và lần khác nó là một lỗi, đó là lý do tại sao cảnh báo là có ở nơi đầu tiên. –

8

Các cài đặt này được đặt trong Cửa sổ -> Tùy chọn -> C/C++ -> Phân tích mã. Bạn có thể tùy chỉnh cài đặt. Ví dụ: nếu bạn chọn No break at the end of case, bạn có thể xác định nhận xét ngăn chặn cảnh báo. Theo mặc định nó "không nghỉ". Vì vậy, tình cờ sao chép/dán thông điệp cảnh báo vào comment làm việc trong trường hợp của bạn:

CDT static code analysis

Như bạn có thể thấy văn bản không phải là một kết hợp chính xác và nó dường như không phải là trường hợp nhạy cảm hoặc.

Đề cập đến your follow-up question about unused variables: Khi bạn tùy chỉnh Unused variable in file scope bạn có thể xác định tên biến mà nên bỏ qua:

enter image description here Có hai trường hợp ngoại lệ được xác định trước khó hiểu "@ (#)" và "$ Id". Rất tiếc, tôi không thể tìm thấy bất kỳ tài liệu chính thức nào vì vậy tôi đã xem xét the source. Có vẻ như người kiểm tra chỉ đơn giản là kiểm tra nếu một tên biến contains() bất kỳ ngoại lệ được chỉ định nào. Nếu có, cảnh báo sẽ bị chặn.

Bên ngoài CDT Eclipse, có mẹo lừa đảo phổ biến. Nếu trình biên dịch cảnh báo về một biến không sử dụng, hãy biến nó thành void. Hoạt động này không có hiệu lực, vì vậy nó an toàn, nhưng từ quan điểm của trình biên dịch biến đó hiện đang được sử dụng. Tôi thường quấn nó trong một macro để làm cho rõ ràng những gì tôi đang làm, ví dụ:

#define UNUSED(var) (void)(var) 

void foobar() 
{ 
    int b;  // not used. 
    UNUSED(b); // now it's used 
} 
1

như là đã được cho biết, trong trường hợp cụ thể này, nó có thể được giải quyết thêm những nhận xét:

//no break 

hay:

//no break at the end of case 

gì thực sự quan trọng là (không nghỉ).

Ngoài ra, bạn cũng không cần phải có thêm nhận xét giữa phần cuối của trường hợp này và trường hợp tiếp theo hoặc nó sẽ không hoạt động. Ví dụ: trường hợp tiếp theo sẽ vẫn dẫn đến cảnh báo:

case enChC: 
    ++nChannel; 
    //No break 
    //This second case decrease the value 
    case enChD: 
    ++nChannel; 
-2

Tôi đã gặp phải câu hỏi này và tôi chỉ muốn loại bỏ chúng. Tôi đã cố gắng thêm/* không ngắt * /, bạn nên đảm bảo rằng nó được thêm vào trước "trường hợp" tiếp theo. Đây là câu hỏi tôi đã gặp

Đây là giải pháp tôi sử dụng:

0

Bạn phải nâng cấp lên Eclipse Oxygen.3 (or.2).

Bắt đầu với các phiên bản này, cảnh báo/điểm đánh dấu có thể bị chặn bằng cách sử dụng "Quick Fix".

Các vấn đề liên quan