2013-06-15 39 views
6

Có cờ nào trong GCC (như -Wempty-body trong tiếng kêu vang), điều đó có thể giúp tôi phát hiện dấu chấm phẩy sau dấu ngoặc trong khi/cho vòng lặp không? Đôi khi rất khó để con người tìm ra những sai lầm đơn giản này.Phát hiện dấu chấm phẩy sau vòng lặp/nếu ngoặc vuông

int i = 0; 
for (i = 0; i < 10; ++i); 
{ 
    cout << i << endl; 
} 

Tôi sử dụng GCC 4.7.3 và clang 3.2-1 ~ exp9ubuntu1.

Đã chỉnh sửa: Tôi cũng kiểm tra xem trình biên dịch có thể giúp tôi tìm thấy những lỗi này sau "báo cáo if-else" hay không.

if (i == 0) 
{ 
    cout << i << endl; 
} 
else; 
{ 
    cout << i << endl; 
} 

gì là gcc thú vị là hữu ích hơn kêu vang (với cờ này (-Wall -pedantic -Wempty-body) bằng cách cảnh báo in:

main.cpp:30:9: warning: suggest braces around empty body in an ‘else’ statement [-Wempty-body] 
+0

thể trùng lặp của [Có thể gcc chính xác bắt điều kiện vô dụng?] (http://stackoverflow.com/questions/851162/can-gcc-accurately-catch-useless-conditionals) –

+1

Trên suy nghĩ thứ hai, đó không phải là một bản sao, xin lỗi. Tuy nhiên, không phải là '-Wempty-body' cũng là một lá cờ GCC? –

+6

Điều này dường như với tôi một lý do rất tốt (tức là khác với phong cách) để bắt đầu '{' trên cùng một dòng với 'if' /' for'/'while' vv Và để có một lớp lót trên cùng một dòng cũng. – Kninnug

Trả lời

2

thử

$ gcc -Wempty thân foo.c

hoặc

gcc -Wextra -c foo.c

+3

Tính năng này không hoạt động đối với gcc/g ++ 4.7.2 (hoặc ít nhất là trên máy tính của tôi) – FDinoff

1

Câu trả lời rõ ràng ở đây là "biên dịch mã của bạn với kêu vang ++" (mặc dù phiên bản 2.9 của tôi cho x86-64 dường như không nắm bắt vấn đề cụ thể này, giống như gcc 4.6.3 không bắt được nó - vì vậy tôi không hoàn toàn thuyết phục tiền đề ban đầu của câu hỏi là hợp lệ).

mã đặc biệt này có thể tránh được vấn đề này bằng cách sử dụng các hình thức, bằng cách đưa ra một lỗi cho việc sử dụng i sau for -loop bản thân:

for(int i = ...) 

thay vì

int i; 
for(i = ...) 

Tất nhiên, điều đó không hoạt động trong trường hợp bạn muốn i để có giá trị sau vòng lặp.

[Và vâng, đó là một lỗi rất khó chịu - Tôi đã dành nhiều giờ nhìn chằm chằm vào màn hình để tìm loại này lỗi vào những thời điểm - thời điểm khác bạn nhận ra nó ngay lập tức]

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