2008-11-12 29 views
5

Tôi chỉ đọc this post về lý do cảnh báo dòng mới tồn tại, nhưng thành thật mà nhóm của tôi có người làm việc trên nhiều nền tảng khác nhau và với một số biên tập viên khác nhau (mọi người đều sử dụng bộ đệm), vì vậy cảnh báo đã trở nên phổ biến và nó không thực sự là một cảnh báo có giá trị chăm sóc nó trở thành tiếng ồn và làm cho việc tìm kiếm cảnh báo nghiêm trọng một rắc rối.Lá cờ nào làm im lặng cảnh báo của GCC về không có dòng mới ở cuối tập tin?

Nhiều lần cảnh báo quan trọng đã không được chú ý bởi vì, mọi người đã quen với việc có hàng triệu cảnh báo vô dụng đi qua, vì vậy rõ ràng là họ chỉ dừng lại nhìn họ cẩn thận, và với lý do IMHO. Người ta có thể nói trong trường hợp của chúng tôi GCC đang khóc sói quá nhiều đối với bất cứ ai để có nó nghiêm túc nữa, đó là một thái độ xấu nhưng bản chất con người của nó chỉ.

Ngay bây giờ chúng tôi biên dịch với -Wall, bởi vì chúng tôi muốn cảnh báo, nhưng có một lá cờ truy cập để tránh các cảnh báo dòng mới?

Lưu ý: Tôi đã xem qua hướng dẫn một chút nhưng không tìm thấy câu trả lời ở bất kỳ nơi nào rõ ràng vì vậy tôi đã từ bỏ.

Lưu ý: Để đáp ứng với giải pháp hoàn toàn hợp lý của Robert Gamble, mã của chúng tôi là nền tảng và chúng tôi có người và xây dựng trên Linux, Solaris và Windows, vì vậy dòng mới ... không được đồng thuận. Và trình biên dịch của ai đó sẽ luôn khóc. Bởi vì có hơn 40 nhà phát triển và các nhân viên không lập trình viên khác.

+0

Miễn là mỗi tệp kết thúc bằng một số loại dòng mới (linefeed, CR + LF) gcc sẽ không phàn nàn mặc dù nền tảng đang chạy. –

+0

Đây là lý do tại sao trình soạn thảo 'nano' chiếu sáng: nó tự động thêm dòng mới vào cuối. Tuyệt vời để chỉnh sửa các tập tin cấu hình (một chút nghèo để viết mã tuy nhiên). –

+0

Âm thanh giống như vấn đề thực sự nằm ở đây: "mọi người đã quen với việc có một cảnh báo vô ích gazillion đi qua". Tôi biên dịch với '-Werror' để điều này không xảy ra. Tôi muốn dành thêm một chút thời gian sửa mã mà chỉ là tốt nếu nó có nghĩa là tôi có thể bật một cảnh báo có thể bắt gặp một vấn đề thực sự. Biên dịch sạch sẽ rất quan trọng để mọi cảnh báo được thực hiện nghiêm túc. –

Trả lời

5

Có không phải là một như xa như tôi biết, tôi đã sử dụng GCC trong nhiều năm.

Cập nhật: Không được có bất kỳ cảnh báo nào được nêu ra với tiêu chuẩn C++ 11. Related Q

+0

Cảm ơn bạn đã xác nhận nỗi sợ của mình :) –

+0

Mặc dù không phải là câu trả lời tôi muốn nghe :) Đây là câu trả lời đúng cho câu hỏi của tôi. –

+0

Câu trả lời này vẫn hợp lệ? Bốn tuổi của nó. – balki

4

Tại sao bạn không chỉ đảm bảo tệp của mình có dòng kết thúc mới như chúng được cho là? Điều này sẽ là một thay đổi cấu hình đơn giản trong các trình chỉnh sửa vi phạm và có vẻ như một cách khá dễ dàng để "im lặng" cảnh báo.

+0

Vâng một lý do là mã là nền tảng chéo và chúng tôi có người và xây dựng trên Linux, Solaris, Windows và Mac, do đó, dòng mới ... không được đồng thuận. Và trình biên dịch của ai đó sẽ luôn khóc. –

+0

gcc sẽ không phàn nàn nếu các tệp kết thúc bằng một dòng cấp dữ liệu khi chạy trên Windows hoặc trở về dòng + dòng khi chạy trên Unix, do đó, điều này sẽ hoạt động miễn là mỗi tệp kết thúc bằng một số dòng mới. –

+0

+1 để có câu trả lời hay. Nhưng chúng tôi sử dụng 3 trình biên dịch ... không chỉ GCC. Hai cái còn lại là tốt đẹp và im lặng về cảnh báo, và 90% của nhóm sử dụng những trình biên dịch đó, chỉ 10% trong số chúng ta sử dụng GCC, vì vậy lỗi này sẽ quay trở lại với chúng ta. À, thật tuyệt khi có một lá cờ như vậy ... –

0

Tôi chắc chắn 90% không có lý do nào để tắt tính năng này.

Lý do cho sự cảnh báo là tập tin mà không một endline cho hành vi undefined khi biên soạn:

Xem tiêu chuẩn: http://c0x.coding-guidelines.com/5.1.1.2.html

Dưới đây là một bài đăng blog với một số mã python (mà tôi chưa thử) mà nói rằng nó sẽ sửa chữa các tập tin nguồn với vấn đề này.

http://www.johndcook.com/blog/tag/gcc/

+0

Trong các trình biên dịch khác, nó có thể được tắt, tôi có nghĩa là bạn có thể tắt tất cả các cảnh báo nếu bạn muốn, đó là "không hợp lý" tất nhiên, nhưng có thể. Vì vậy, có rất nhiều đối số cho việc chuyển đổi một hành vi vô dụng và trong cuộc sống thực được xác định rõ ràng (biên dịch hoàn toàn tốt) cảnh báo. –

+1

Ok, thành thật mà nói, đúng là không có lý do gì để ** tắt nó đi trong thế giới lập trình lý tưởng, nhưng dự án của chúng ta bị một số vấn đề hậu cần khiến cho nó trở nên tốt hơn. –

5

Giả sử bạn sử dụng một số loại hệ thống kiểm soát nguồn, bạn có thể thêm móc trước cam kết đảm bảo rằng tệp văn bản kết thúc bằng một dòng mới phù hợp. Hơn nữa, tùy thuộc vào hệ thống kiểm soát nguồn bạn sử dụng, bạn có thể thêm một móc trước khi cam kết thực sự sửa lỗi dòng kết thúc nếu nó không có mặt.

+0

+1. Trên thực tế đây là một giải pháp tốt, và có lẽ sẽ kết thúc làm điều này. Mặc dù loại đường vòng của nó để làm việc này :) –

+0

+1 Bạn đánh tôi với nó. –

+0

Chết tiệt, tôi đã chỉ cần viết này :-) Chúng tôi làm một cái gì đó tương tự như loại bỏ các tab. – Enno

0

Thêm móc vào điều khiển nguồn của bạn sẽ không cho phép đăng ký mã thành công cho đến khi dòng mới được thêm vào?

+2

Ý tưởng thêm một móc để sửa các tệp tốt hơn, so với ý tưởng từ chối cam kết. Tôi cho một, có thể hiếm trong nghề nghiệp của chúng tôi, nghĩ rằng nhu cầu của con người đi trước khi nhu cầu của máy móc và trình biên dịch. –

1
-Wno-eof-newline 

này đã được bổ sung với các bản sửa lỗi cho gcc bug 14331


Lạ lùng thay tôi có thể không thực sự có được gcc để ra một cảnh báo cho newlines mất tích. Tôi đoán các phiên bản mới hơn đã được phân phối hoàn toàn với cảnh báo này.

Tôi có thể nhận gcc để chấp nhận -Wno-eof-newline nhưng nó phàn nàn về cờ không được công nhận khi tôi thử -Weof-newline. C++ 11 đã loại bỏ yêu cầu cho các dòng mới ở phần cuối của các tệp nhưng để viết mã di động theo các tiêu chuẩn cũ, nó thực sự có thể cho phép các cảnh báo như vậy.


May mắn thay kêu vang không còn hỗ trợ một cách chính xác chẩn đoán về việc thiếu dòng mới: Cảnh báo này có thể được kích hoạt với -Wnewline-eof trong tất cả các chế độ, hoặc trong C++ chế độ 11 trở lên nó cũng có thể được kích hoạt với -Wc++98-compat-pedantic.

Những cảnh báo là tắt theo mặc định, nhưng nếu bạn đang tận dụng -Weverything cờ kêu vang của để cho phép một chiến lược 'trừ' cho việc kiểm soát cảnh báo, sau đó trong C++ chế độ 11 trở lên bạn cần cả hai -Wno-newline-eof-Wno-c++98-compat-pedantic để vô hiệu hóa cảnh báo.

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