2012-01-11 32 views
11

Chúng tôi có các sinh viên gửi bài tập trong khóa học trong khi họ phải tuân thủ một số quy ước về mã. Ví dụ: tên hàm phải ở trong camelCase. Độ dài chức năng không được vượt quá 50 dòng (Các nhiệm vụ đủ đơn giản để phân chia), v.v. Tôi đang tìm một công cụ có thể tự động kiểm tra xem C/C++ (Cả hai đều cần thiết). Đó là, tôi muốn công cụ để khiếu nại khi một cái gì đó là sai để học sinh có thể sửa chữa nó. Cho đến nay tôi đã không thể tìm thấy một cái gì đó phù hợp tốt. Nếu điều đó là nguồn mở và có thể dễ dàng được cấu hình theo nhu cầu của chúng tôi sẽ là o.k.Công cụ tự động kiểm tra quy ước mã cho C/C++

+2

Bạn không có khả năng tìm một công cụ để thực thi các tên hàm camelCase trong mã C++, vì kiểu chi phối là lowercase_with_underscores, với một số lượng đáng kể các deviants thích PascalCasing. Hy vọng tốt nhất của bạn là một cái gì đó cấu hình. –

+1

Tại sao bạn muốn làm điều đó tự động? Bạn ít nhất có thể đọc và sửa bài tập về nhà theo cách thủ công, đó là công việc của bạn. Bạn không thể định lượng phong cách. Bạn có thể định lượng sự tuân thủ, nhưng đó là một cái gì đó hoàn toàn khác. – wildplasser

+3

Chúng tôi đang định lượng sự tuân thủ. Chúng tôi muốn làm điều đó tự động để khi một sinh viên có một sai lầm về một trong những vấn đề đó, ông có thể nhận được một email tự động để sửa chữa nó và để lại thời gian của người kiểm tra cho doanh nghiệp nghiêm trọng hơn. – Shiroko

Trả lời

2

Bạn có thể sử dụng công cụ unix indent để buộc một số kiểu mã hóa C.

Xem

man 1 indent

khi nó được cài đặt.

+0

và chạy kết quả thông qua một khác biệt với bản gốc ... –

+0

Thụt lề không thể "ép buộc" số dòng tối đa của hàm và bất kỳ quy tắc nào liên quan đến ngắt dòng sẽ phá hủy đầu ra khác ... – log0

0

AFAIK hình ảnh studio cao cấp và cuối cùng có các công cụ phân tích và thử nghiệm tùy chọn nâng cao như vậy. nhưng những người không được tự do :(

+0

Có, nhưng tiếc là điều đó không hữu ích cho trường hợp của chúng tôi. – Shiroko

+0

/phân tích thực hiện phân tích mã tĩnh. Điều này không liên quan gì đến các quy ước về phong cách. – pmr

0

Doxygen sản xuất đầu ra XML đó sẽ rất dễ dàng để xử lý ... Vâng, ít nhất là dễ dàng như tìm ranh giới từ trong định danh bao giờ là.

0

Bạn có thể sử dụng gọn gàng trong debug chế độ, với một chút các script shell/perl

Về cơ bản, ý tưởng là để chạy gọn gàng và cung cấp đầu ra trong một tệp .txt khác, sau đó có thể được phân tích cú pháp để chỉ cung cấp các đầu ra lỗi và bạn có thể lấy các dòng mã gốc và chạy DIFF :-)

Có thể yêu cầu một chút mã hóa và tập lệnh để có quyền. Chúng tôi đã sử dụng một cái gì đó tương tự, nhưng đối với một dự án hoàn toàn khác và mục tiêu.

Nếu không, bạn có thể thử và sử dụng các:

http://gcgreatcode.sourceforge.net/ 
http://universalindent.sourceforge.net/ 

Nó có thể giúp đỡ phần nào với vấn đề này, với một chút mã hóa để có được kiểm tra tự động cụ thể của bạn.

0

Hơi phụ thuộc vào mức độ chi tiết và sự cần thiết đầu tư (hoặc thời gian tự mình làm hoặc trả tiền cho ai đó), bạn có thể muốn xem clang: Đây là C, C++ và Object-C co mpiler bằng văn bản C++ cho thấy cấu trúc dữ liệu nội bộ của nó. Tôi đã sử dụng một plug-in để kiểm tra mã cho các sai lầm khác nhau, chủ yếu là nhỏ hơn, những thứ nitpicking, mặc dù. Kể từ khi trình biên dịch cho thấy một AST nó đã được, ví dụ, tầm thường để nhổ ra cảnh báo khi C-phong cách phôi được tìm thấy (nó có thể nhận được một chút ồn ào trên mã C).

Mặc dù tôi chưa sử dụng, nhưng clang cũng có thể phát ra một biểu diễn XML về cấu trúc dữ liệu nội bộ của nó. Nếu bạn không cần đặt câu hỏi như "là lớp A lớp cơ sở có thể truy cập công khai của B" (tức làcác câu hỏi không tầm thường đòi hỏi phải kiểm tra ngữ nghĩa của AST), đây có thể là một con đường dễ dàng hơn cho một công cụ mà bạn mô tả. Trên thực tế, trong cả hai trường hợp, bạn có thể giúp sinh viên thực hiện kiểm tra: nếu bạn có đủ sinh viên và chỉ định cùng một kiểm tra nhiều lần để đảm bảo bạn quay lại ít nhất một lần triển khai tốt, bạn có thể thu thập một bộ sưu tập gọn gàng khá nhanh. ... và nếu sinh viên của bạn là bất cứ điều gì giống như tôi (tốt, tôi không thực sự muốn bạn số phận khủng khiếp như thế này) họ thậm chí sẽ thích tập thể dục.

Một điều, tuy nhiên: không dấu bất kỳ C++ lập trình viên xuống cho không sử dụng CamelCase! HereIsASimpleAndImpressiveExampleOfWhyUseOfCamelCaseIsReallyBad: you_have_a_much_easier_time_to_read_this! Lập trình viên C++ có xu hướng làm điều đúng. Do đó, các ưu đãi ngớ ngẩn như CamelCase và Ký hiệu Hungary là không sử dụng.

1

QA-CPP có thể trợ giúp tại đây. Đã hơn một năm kể từ khi tôi sử dụng nó nhưng bạn có thể cấu hình nó để làm điều đó.

Bạn có thể muốn cung cấp cho những người ở Lập trình nghiên cứu một cuộc gọi và kiểm tra xem bạn có thể làm điều đó không.

Tuy nhiên câu hỏi vẫn là lý do tại sao? Nếu giảng viên của tôi bắt đầu mắng tôi với phong cách mã trên chức năng tôi sẽ nghĩ rằng ông đã có một ốc vít lỏng lẻo. Là một người đã trải qua hệ thống trường đại học, bạn nên chuẩn bị cho họ làm việc trong thế giới thực - thiên đường biết những thứ tôi nhìn thấy qua bây giờ để lại rất nhiều điều mong muốn.

+0

Theo kinh nghiệm của tôi, trong thế giới thực, bạn phải tuân theo các tiêu chuẩn mã hóa. – dangerousdave

+1

Anh ấy không ở trong thế giới thực, anh ấy làm việc trong một trường đại học. –

1

Có EditorConfig, có vẻ như đây là công cụ để thực thi các tiêu chuẩn mã hóa trên nhiều trình chỉnh sửa khác nhau. Hỗ trợ và chức năng bị hạn chế, nhưng đó là một ý tưởng khá hay. http://editorconfig.org/

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