Tải bản đầy đủ (.pptx) (35 trang)

C coding convention

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (415.27 KB, 35 trang )

C++ Coding Convention
SVTH: Tiêu Mỹ Hồng – 51303297
Đoàn Thị Huyền Trang – 51303186
Khoa: Công Nghệ Thông Tin

1


C++ Coding Convention
I.

CHUẨN VIẾT CODE TRONG C++

1.

Tổ chức chương trình

2.

Chuẩn tài liệu

II.

CÁC LỖI THƯỜNG GẶP TRONG C++

III. CÔNG CỤ KIỂM TRA TỰ ĐỘNG CODE CÓ VIẾT ĐÚNG
CHUẨN HAY KHÔNG
1.

Giới thiệu về công cụ hỗ trợ kiểm tra chuẩn viết Code – Cppcheck –
trong C++



2.

Mục đích sử dụng của Cppcheck

2


C++ Coding Convention
I.Chuẩn viết code trong C++
C++ (đọc là "C cộng cộng" hay "xi-plus-plus", IPA: /siː pləs pləs/) là một loại ngôn 
ngữ lập trình. Đây là một dạng ngôn ngữ đa mẫu hình tự do có kiểu tĩnh và hỗ 
trợ lập trình thủ tục, dữ liệu trừu trượng, lập trình hướng đối tượng, và lập trình 
đa hình. 

3


C++ Coding Convention
I.Chuẩn viết code trong C++
1.Tổ chức chương trình
 Môđun hóa chương trình:
- Chương trình nên được tách thành nhiều môđun, mỗi môđun nên thực hiện
một công việc và càng độc lập nhau càng tốt. Điều này sẽ giúp dễ bảo dưỡng
chương trình hơn.
- Khi chuyển thông tin cho chương trình con nên sử dụng các tham số để tạo
tính độc lâp và dễ dàng kiểm soát giá trị của chúng khi chương trình thi hành.

4



C++ Coding Convention
 Định nghĩa và cài đặt:
- Định nghĩa và cài đặt của các lớp phải được chia thành nhiều file để có thể
dễ dàng tái sử dụng
- Định nghĩa các lớp được lưu trong file header với mở rộng *.h. Cài đặt
của các thành viên của lớp lưu trong file nguồn với mở rộng *.cpp
- Mỗi file header của lớp nên sử dụng các định hướng #ifndef, #define, và
#endif để đảm bảo mỗi file header chỉ được include một lần.

5


C++ Coding Convention
2. Chuẩn tài liệu
 Chú thích:
- Sử dụng // cho các dòng chú thích. Chỉ dùng /* */ để tạm thời vô hiệu hóa
cho các đoạn chương trình test hoặc debug.
- Mỗi file nguồn cả .cpp và .h đều phải bắt đầu bằng một khối chú thích đủ để
người đọc có thể kết nối các file nếu chúng bị tách ra.
- Mỗi lớp hàm , phương thức phải có một khối chú thích mô tả ngắn gọn lớp,
hàm, phương thức.
- Có thể chú thích các đoạn code bên trong hàm, tuy nhiên chỉ nên chú thích đủ
hiểu. Quá nhiều chú thích và chú thích thừa làm code trông rối.


C++ Coding Convention
 Tên gọi
- Sử dụng các tên có nghĩa
- Đặt tên một cách nhất quán

- Tên của các project, form, và component sinh bởi môi trường lập trình.
- Tên biến và tên hàm thường phải là các từ hoặc cụm từ.
- Không được viết tắt trừ các từ viết thông dụng như HTML, khi đó coi từ viết
tắt như từ thông thường ( tên sẽ có dạng convertToHtml thay vì
convertToHTML)

7


C++ Coding Convention
-

Đặt tên cho các namespace bằng chữ in thường.
Vd: mynamespace

-

Tên biến là một danh từ bắt đầu bằng một kí tự in thường , các từ tiếp theo bắt đầu
bằng một kí tự in hoa
Vd: audioSystem...

- Tên hàm thể hiện chức năng : các tiền tố thường được sử dụng get/set, add/remove,
create/destroy, start/stop, insert/delete....
- Tên class dùng chữ hoa tất cả các chữ cái đầu mỗi từ, còn lại là các chữ cái thường.
Vd: GameBoard,...
8


C++ Coding Convention
 Khoảng cách

- Nên đặt khoảng cách sau dấu phẩy hoặc dấu chấm phẩy.
- Xung quanh các toán tử.
VD:
Method(int a, int b)
x=a+b;
for(int i = 0; i < n; i++)
9


C++ Coding Convention
Dấu ngoặc
- Tuỳ theo các chuẩn quy định.
-

VD: chuẩn GNU:
if (a[i] > a[i + 1])
{

hoặc

if(a[i] > a[i + 1]) {

temp = a[i];

temp = a[i]; a[i] = a[i + 1];
a[i] = a[i + 1];

a[i + 1] = temp;

a[i + 1] = temp; }

}
10


C++ Coding Convention
 Định dạng:
-  Lùi đầu dòng các đoạn code, mỗi mức dùng 3 hoặc 4 ký tự, tốt nhất là

dùng tab.
- Mỗi dòng chỉ chứa nhiều nhất một lệnh và không dài quá 79 ký tự.
- Có thể căn thẳng hàng để nâng cao hightlight.
- Nên có các khoảng trắng giữa từ khoá và dấu ‘(‘, nhưng không nên có
khoảng trắng giữa tên hàm và dấu ‘(‘. Nên có một khoảng trắng trước và
sau mỗi toán tử số học hoặc logic, chẳng hạn +, <<, ||, <=,...
- Chèn các dòng trắng khác giữa các đoạn khác nhau trong chương trình
11


C++ Coding Convention
 Thiết kế:
- Không để dữ liệu của lớp ở dạng public
- Hạn chế tối đa việc dùng biến toàn cục
- Nguyên tắc quyền ưu tien tối thiểu
- Không để dữ liệu trong lớp mà nó không thực sự thuộc về lớp đó.
- Các hàm hoặc phương thức của lớp không nên tạo output trừ khi đó
là nhiệm vụ của phương thức đó.
- Mỗi phương thức/hàm chỉ chứa tối đa 30 dòng kể cả tính từ mở hàm
tới kết thúc hàm.

12



C++ Coding Convention
CODE:
- Viết theo chuẩn OSI dù complier có bắt buộc hay không.
- Hạn chế #include ngoài chuẩn.
- Nên để int main() và return 0; thay vì void main()
- Khai báo using std:: ngay cả khi IDE không bắt buộc.
- Các hằng số không nên viết trực tiếp vào chương trình

13


C++ Coding Convention
- Luôn viết new và delete thành từng cặp.
- Khi khai báo con trỏ dấu con trỏ nên được đặt liền với tên nhắm tránh trường
hợp: char *p,q,r;//q,r không là con trỏ
- Nên sử dụng các dấu () khi muốn tránh các lỗi về độ ưu tiên toán tử
- Tách các biểu thức phức tạp thành các biểu thức đơn giản hơn

14


C++ Coding Convention
- Viết các lệnh dễ hiểu, không viết các lệnh “khôn ngoan”.
- Cẩn thận với dấu = và dấu == là 2 toán tử gây nhầm lẫn nhất trên C,
nhưng bạn có thể tránh gặp nó bằng thói quen viết r-value ( biểu thức bên
phải phép gán) sang bên trái phép so sánh.
- Các idiom


15


II. Các lỗi thường gặp trong C++

STT

Thông báo lỗi

Ý nghĩa

1

( expected

2

) expected

3

,expected

Thiếu dấu 
Các lỗi này thường xảy ra khi ta sơ sót, dẫn đến nếu 
thiếu các dấu mở hoặc đóng ngoặc, dấu phẩy

4

{ expected


5

} expected

6

286/287 instructions
not enabled

Tập lệnh của bộ vi xử lý 80286 và bộ xử lý toán học 
chưa được kích hoạt
Vào Options/Compiler/Advanced Code generation ... 
để điều chỉnh lại

7

Ambiguity between 
‘function 1’ and 
‘function 2’

2 hàm function 1 và function 2 giống nhau, không thể 
phân biệt được
16


8

Array bounds missing ] Thiếu dấu đóng ngoặc ] khi truy xuất đến các
phần tử của mảng


9

Array must have at
least one element

Khi khai báo mảng phải có ít nhất 1 phần tử.
Xảy ra khi khai báo mảng mà số phần tử tối đa
là âm hoặc bằng 0

10

Array size too large

Kích thước của mảng quá lớn, vượt quá dung 
lượng vùng nhớ quy ước là 64K

11

Bit field cannot be 
static

Kiểu dữ liệu Bit field không thể có kiểu static

12

Bit field too large

Kích thước của Bit filed quá lớn


13

Bit field must be signed
Kiểu dữ liệu của Bit field phải là số nguyên
or unsigned int
Bit filed must contain Kích thước của mỗi Bit field phải có ít nhất 1bit
at least one bit
Body already defined
Hàm đã được định nghĩa rồi. Lỗi xảy ra khi ta
for this function
viết phần thân của một hàm nào đó 2 lần
Call of nonfunction
Câu lệnh gọi hàm của ta là sai. Tên hàm mà ta
gọi có thể là một tên kiểu/hằng/biến ...

14
15
16

17


1

Cannot call ‘main’ from
within the program

Không thể gọi thực hiện hàm main() trong chương
trình, vì đây là một hàm đặc biệt, tự động thực hiện
một lần trong mỗi lần chạy chương trình


18

Cannot cast from ‘type 1’
to ‘type 2’

Không thể ép kiểu dữ liệu từ kiểu 1 sang kiểu 2

19

Cannot convert ‘type 1’
to ‘type 2’

Không thể chuyển đổi dữ liệu từ kiểu 1 sang kiểu 2

20

Cannot initialize ‘type 1’
with ‘type 2’

Không thể khởi gán dữ liệu thuộc kiểu 2 cho biến
thuộc kiểu 1

21

Cannot modify a const
object

Không thể thay đổi giá trị của một hằng số. Xảy ra
khi ta thực hiện phép gán giá trị mới cho một hằng


22

Case outside of switch

Lệnh CASE nằm bên ngoài SWITCH

23

Case statement missing :

Lệnh CASE thiếu dấu 2 chấm (:)

24

Character constant must
be one or two characters
long

Kích thước của hằng ký tự không đúng. Xảy ra khi
ta ghi một chuỗi dài các ký tự vào giữa cặp dấu
nháy đơn ‘’
18


25
26
27
28
29


Compound statement
missing }
constant expression
required
Could not find a match
for argument(s)
Could not find file
‘filename’

Thiếu dấu } kết thúc khối lệnh
Vị trí này lẽ ra phải là một biểu thức hằng, có giá
trị không đổi
Không tìm thấy đối số thích hợp
Không tìm thấy tập tin

Declaration is not
allowed here
Declaration missing ;
Declaration syntax error
Declaration terminated
incorrectly

Vị trí khai báo sai. Không được khai báo tại đây

33
34

Declaration was expected
Default outside of switch


35

Default value missing

Thiếu khai báo
Lệnh mặc định DEFAULT nằm bên ngoài khối
lệnh SWITCH
Thiếu giá trị mặc
19định

30
31
32

Khai báo thiếu dấu chấm phẩy (;)
Khai báo không đúng cú pháp
Khai báo sai (gần giống lỗi trên)


36

Division by zero

Chia cho 0, lỗi này xảy ra khi mẫu số của một
phân số có giá trị bằng 0

37

Do statement must

have while

Lệnh Do phải đi với While. Xảy ra khi thiếu
While trong câu lệnh Do ...

38

Do – while statement
missing (

39

Do – while statement
missing )

40

Do – while statement
missing ;

41

Duplicate case

Lệnh CASE bị trùng, xảy ra khi ta viết 2 dòng
CASE khác nhau nhưng cùng một giá trị như
nhau

42
43

44

Expression expected
Expression syntax
Extra parameter in call
to function

Vị trí này phải là một biểu thức
Sai cú pháp khi xây dựng biểu thức
Gọi thực hiện hàm nhưng lại truyền dư tham số

45

File name too long

Tên tập tin quá dài

Thiếu dấu (, ), ; trong câu lệnh Do ... While

20


46

For statement missing (

47

For statement missing )


48

For statement missing ;

49

‘function’ cannot return Hàm có tên ‘function’ không thể trả về một giá trị,
a value
thông thường vì ta khai báo nó là hàm kiểu Void
‘function’ must be
Hàm có tên ‘function’ phải được khai báo không có
declared with no
tham số, xảy ra khi phần khai báo (prototype) và
parameters
phần thân hàm không giống nhau về số tham số
‘function’ must be
Tương tự như lỗi trên
declared with one
parameter
‘function’ must be
declared with two
parameters
Function call missing )
Gọi hiện thực hàm thiếu )

50

51

52


54
55

Function calls not
supported

Thiếu dấu (, ), ; trong câu lệnh For

Không thể gọi hàm dạng này/kiểu này
21


56

57

Function should return a Hàm cần phải trả về 1 giá trị, xảy ra khi ta khai báo
value
hàm có kiểu trả về nhưng lại thiếu câu lệnh
Return ...
Goto statement missing
Dùng lệnh Goto mà không có nhãn
label

58

‘identifier’ is not a
member of struct


Tên ‘identifier’ không phải là thành phần của cấu
trúc, xảy ra khi ta viết tên thành phần sai

59

‘identifier’ is not a
parameter

Tên ‘identifier’ không phải là 1 tham số

60

Identifier expected

Thiếu tên biến

61

If statement missing (

Câu lệnh If thiếu mở hay đóng ngoặc

62

If statement missing )

63

Illegal character
Ký tự không hợp lệ, thường xảy ra khi ta biểu diễn

‘character’ (0x‘value’) các hằng số hệ hexa, nhưng lại sử dụng các chữ cái
khác A..F hay a..f

64

Illegal octal digit

Không phải là một hệ 8 hợp lệ

65

Illegal pointer
subtraction

Thực hiện phép trừ không hợp lệ trên con trỏ
22


66
67
68

69
70
71
72

Illegal use of floating
point
Illegal use of pointer


Dùng dấu chấm động không đúng, ví dụ sử dụng
phép toán modulo % trên số thực chẳng hạn
Dùng con trỏ không hợp lệ

Implicit conversion of
‘type 1’ to ‘type 2’ not
allow

Không cho phép ngầm chuyển từ kiểu 1 sang kiểu 2

Improper use of typedef Kiểu dữ liệu ‘identifier’ được sử dụng không đúng
‘identifier’
Incompatible type
Không thể chuyển đổi kiểu dữ liệu
conversion
Incorrect number format Không phải là dữ liệu dạng số, thường xảy ra khi ta
gõ các ký tự khác 0..9 trong 1 dữ liệu kiểu số
Incorrect use of default
Dùng DEFAULT không đúng

73

Invalid use of dot

Dùng dấu chấm (.) không đúng vị trí

74

Lvalue required


75

main must have a return
type of int

Vế trái của phép gán phải là 1 tên biến. Lỗi xảy ra
khi ta gán giá trị cho 1 hằng
Hàm main phải trả về 1 giá trị kiểu int
23


76

Misplaced break

77

Misplaced continue

Dùng break ngoài vòng lặp hoặc ngoài
SWITCH
Dùng continue ngoài vòng lặp

78

Misplaced decimal point

Dấu chấm thập phân sai vị trí


79

Misplaced else

Dùng else sai vị trí (thiếu if,...)

80
81

‘new’ and ‘delete’ not
supported
No: following the ?

Không được phép dùng new và delete trong cấp
phát vùng nhớ động
Toán tử điều kiện thiếu dấu 2 chấm (:)

82

No file name ending

Không có phần kết thúc tên tập tin

83

No file name given

Không có tên tập tin

84


No type information

Không tìm thấy thông tin gì về kiểu dữ liệu

85

Not an allowed type

Kiểu dữ liệu này không cho phép dùng ở đây

86

Numeric constant too
large

Hằng số có giá trị quá lớn
24


87

Pointer to structure
required on left side of
-> or -> *

Xảy ra khi dùng con trỏ cấu trúc không đúng
cách để truy xuất các thành phần của cấu trúc

88


sizeof may not be
applied to a bit field
sizeof may not be
applied to a function
Size of ‘identifier’ is
unknown or zero
Size of the type is
unknown or zero
Statement missing ;

Toán tử sizeof() không dùng cho kiểu bit field

89
90
91
92
93
94

Toán tử sizeof() không dùng cho hàm

Kích thước của ‘identifier’ bằng 0 hoặc không
xác định
Kích thước của kiểu dữ liệu bằng 0 hoặc không
xác định
Thiếu dấu chấm phẩy (;), thông thường do thiếu
dấu ; tại dòng trên của dòng báo lỗi
Structure required on Xảy ra khi truy xuất các thành phần của cấu trúc
left side of . or . *

không đúng cách
Structure size too large Kích thước của cấu trúc quá lớn, vượt quá giới
hạn 64K chẳng hạn
25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×