Thứ Sáu , Tháng Một 20 2017
Trang chủ / Kinh nghiệm lập trình / Qui tắc đặt biến, khai báo biến hiệu quả trong C++

Qui tắc đặt biến, khai báo biến hiệu quả trong C++

Một số mẹo và cách lập trình, cách đặt biến, khai báo biến tốt đối với các bạn học lập trình C/C++ 
1. Biến nên được khai báo ở gần vị trí mà nó bắt đầu được sử dụng, như vậy bạn sẽ tránh được việc khai báo một loạt các biến dư thừa ở đầu hàm hay chương trình.

2. Mỗi biến nên khai báo trên một hàng nhằm dễ chú thích về ý nghĩa của mỗi biến.

Ví dụ:

int level = 0; // indentation level
int size = 0; // size of symbol table
int lines = 0; // lines read from input

3. Tên biến nên đặt sao cho đủ nghĩa, có thể là là các từ hoàn chỉnh hoặc viết tắt nhưng phải dễ đọc (dễ phát âm).

Ví dụ:

wages = hoursWorked * hourlyRate;
rõ ràng hơn là
w = h * r;
Ngoại lệ: Các biến sử dụng để chạy các vòng lặp nên đặt đơn giản là: i, j, k, …

4. Tên của một hàm nên phản ánh công việc hoặc giá trị trả về của nó.

Ví dụ:

CheckForErrors() thay vì ErrorCheck()

DumpDataToFile() thay vì DataFile().

5. Bạn nên sử dụng hợp lý các ký tự hoa và thường khi đặt tên biến, điều này sẽ giúp chương trình dễ đọc hơn, một số gợi ý như sau:

· Tên biến được viết bằng chữ thường, viết hoa chữ các đầu tiên của từ thứ hai trong tên biến (kiểu camelBack), ví dụ: totalHouseWorked.

· Tên hằng số được viết hoa toàn bộ, các từ viết cách nhau bằng dấu gạch dưới, ví dụ: TAX_RATE.

· Các kiểu dữ liệu do người dùng định nghĩa được viết hoa toàn bộ hoặc viết hoa các ký tự đầu, ví dụ: BIGINT hay BigInt.

· Tên các hàm được viết hoa chữ cái đầu từ, có thể bắt đầu từ từ thứ nhất hay thứ hai, ví dụ: DisplayInfo() hoặc displayInfo().

6. Các hằng số không nên viết trực tiếp vào chương trình.

Thay vì thế, người ta thường sử dụng lệnh #define hay const để đặt cho những hằng số này những tên có ý nghĩa. Điều này sẽ giúp lập trình viên dễ kiểm soát những chương trình lớn vì giá trị của hằng số khi cần thay đổi thì chỉ phải thay đổi một lần duy nhất ở giá trị định nghĩa (ở #define hay const).

Ví dụ:

popChange = (0.1758 – 0.1257) * population;
nên được viết là:
const double BIRTH_RATE = 0.1758,
DEATH_RATE = 0.1257;

popChange = (BIRTHRATE – DEATH_RATE) * population;
Ghi chú: bạn không nên dùng #define thường xuyên để định nghĩa các hằng số, bởi vì trong quá trình debug, bạn sẽ không thể xem được giá trị của một hằng số định nghĩa bằng #define.

7. 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 sau:

char* p, q, r; // ß q, r không là con trỏ

Trong trường hợp này nên viết là:

char *p, *q, *r;

(luật này cũng được dùng khi khai báo tham chiếu với dấu &)

8. Các biến cần gợi nhớ và thống nhất.

Như vậy sẽ dễ dàng cho người review code cho bạn, cũng như những người đến sau, họ duy trì và sửa chữa hệ thống. Họ không phải phân vân hàm f này ở chỗ này làm gì, hàm f ở chỗ kia làm cái gì nhỉ, tham số đầu vào của hàm này là gì, của hàm kia là gì.

9. Đừng đặt biến quá dài

Tên biến dài vừa đủ sẽ làm rõ ý nghĩa của biến, nhưng quá dài chẳng những không làm rõ mục đích sử dụng biến mà lại còn làm rối rắm chương trình. Ví dụ: thay vì đặt theNameOfStudent thay bằng studentName hoặc stuName

C. Trình bày dòng lệnh:

1. Các biến không nên được sử dụng lại với nhiều nghĩa khác nhau trong cùng một hàm.

Ví dụ:

Không nên sử dụng biến như sau:

for (i = 0; i < n; i++) // ß n mang ý nghĩa là số lần lặp

. . .

for (i = 0; i < 10; i++)

for (n = 0; n < 10; n++) //ß n sử dụng như biến điều khiển lặp

. . .

2. Các toán tử và toán hạng trong một biểu thức nên được tách rời nhau nhằm làm biểu thức dễ đọc hơn.

Ví dụ:

mass = volume * density;

Thay vì:

mass=volume*density;

Ngoại lệ: không chèn khoảng trắng vào giữa toán hạng và toán tử ++ và –

3. Nên có khoảng trắng ngăn cách giữa dấu phẩy hay chấm phẩy với các tham số.

4. Nên có khoảng trắng giữa từ khóa và dấu ‘(’, nhưng không nên có khoảng trắng giữa tên hàm và dấu ‘(‘.

Ví dụ:

// no space between ‘strcmp’ and ‘(‘,
// but space between ‘if’ and ‘(‘
if (strcmp(input_value, “done”) == 0)
return 0;

5. 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ử.

Ví dụ:

// No!
int i = a >= b && c < d && e <= g + h;
// Better
int j = (a >= b) && (c < d) && (e <= (g + h));

6. Nên dùng các dòng trắng để phân chia các hàm trong một tập tin, các đoạn lệnh trong một hàm như: đoạn nhập xuất dữ liệu, các đoạn tương ứng với các bước xử lý khác nhau,

7. Mỗi dòng lệnh không nên dài quá 80 ký tự, điều này giúp việc đọc chương trình dễ dàng hơn khi không phải thực hiện các thao tác cuộn ngang mang hình.

8. Một dòng lệnh quá dài nên được tách thành nhiều dòng.

Ví dụ:

if (foo->next == NULL
&& totalcount < needed && needed <= MAX_ALLOT
&& server_active(current_input))
{

}
Hoặc:

for (curr = *listp, trail = listp;
curr != NULL;
trail = &(curr->next), curr = curr->next)
{

}

Hoặc:

int myComplexFunction( unsigned unsignedValue,
int intValue,
char *charPointerValue,
int *intPointerValue,
unsigned *unsignedPointerValue);

D. Chú thích chương trình:

1. Khi đặt các chú thích, bạn nên sử dụng dấu // vì dấu này sẽ không có ảnh hưởng khi bạn sử dụng cặp ký hiệu /* */ để vô hiệu hóa một đoạn lệnh trong quá trình sửa lỗi chương trình. Bạn nên nhớ rằng trong C/C++ không cho phép các cặp dấu /* */ lồng nhau.

2. Với các chú thích ngắn, bạn đặt nó trên cùng dòng lệnh cần chú thích. Với các chú thích dài hơn, hoặc chú thích cho cả một đoạn lệnh, bạn đặt câu chú thích trên một dòng riêng ngay phía trên câu lệnh cần chú thích.

Ví dụ:

Chú thích ngắn:

if (a == 2)
return(TRUE); // special case
else
return(isprime(a)); // works only for odd a

Chú thích dài:

if (argc > 1) {
// Get input file from command line.
if (freopen(argv[1], “r”, stdin) == NULL)
error(“can’t open %sn”, argv[1]);
}

3. Không nên lạm dụng chú thích.

Ví dụ:

i++; // tăng i lên 1 đơn vị

Chú thích như trên là không cần thiết vì bản thân dòng lệnh đã nói lên mục tiêu của nó. Thay vì vậy, bạn nên cố gắng giữ cho chương trình của bạn dễ đọc, dễ hiểu qua việc trình bày chương trình rõ ràng, đơn giản và cách đặt tên hợp lý.

II. Ví dụ:

/***********************************************
*     Program        : Equation solving************************************************/
#include <conio.h>
#include <stdio.h>
#define     NO_SOL         1     //no solution

#define     ONE_SOL        2     //one solution
#define MULTI_SOL     3     //undefined solution
// Function name     : Input
// Description             : get coefficients
// Return type      : void
// Argument              : int *a
// Argument              : int *b
void Input(int *a, int *b)
{
printf(“a = “);
scanf(“%d”, a);
printf(“b = “);
scanf(“%d”, b);
}

// Function name     : Output
// Description             : print result
// Return type      : void
// Argument              : int nSol — solution type
// Argument              : float x — the solution

void Output(int nSol, float x = 0)
{
switch (nSol)
{
case NO_SOL:
printf(“No solution!n”);
break;
case ONE_SOL:
printf(“One solution: %fn”, x);
break;
case MULTI_SOL:
printf(“Undefined solution!n”);
break;
}
}
void main()
{
int a, b;     // coefficients
int nSol;     // solution type
float x;     // the solution
Input(&a, &b);
if (a == 0)
{
if (b == 0)
nSol = MULTI_SOL
else
nSol = NO_SOL;
}
else
{
nSol = ONE_SOL;
x = -(float)b/a;
}
Output(nSol, x);
getch();
}

 

 

Phần II: Các lỗi cơ bản thường gặp khi biên dịch chương trình

1.Undefined symbol “cout” hoặc “cin”: chương trình ko hiểu được các ký tự: cout và cin. Đây chính là hai hàm nhập xuất trong C++

=> include thiếu thư viện <iostream.h>

 

2.Function “getch” should have a prototype: hàm getch nên có một nguyên mẫu.

=>include thiếu thư việc của hàm getch(): <conio.h>

 

3. Function “hàm của bạn” should have a prototype: nguyên nhân là do “hàm của bạn” được định nghĩa và khai báo không giống nhau: tên hàm khác nhau, chữ hoa chữ thường, số lượng biến truyền vào hàm hoặc do gọi hàm trong hàm main không giống với hàm đuộc định nghĩa và khai báo.

 

Lưu ý:

–         Tên hàm không được có khoảng trống, liền sau hàm là một dấu mở ngoặc (

 

4.Statement missing ; : trình bày thiếu ;. Thông thường lỗi này sẽ báo cho bạn biết ngay tại vị trí thiếu.

 

5.Declaration terminate incorrectly: khai báo dấu thoát không đúng . Đây là lỗi do bạn để dấu ; ngay sau tên hàm trong khi định nghĩa hàm.

=> Bỏ dấu ;

Lưu ý:

–         Trong khi khai báo hàm (trước hàm main) thì tên hàm phải có ; nhưng khi định nghĩa hàm không có dấu ;. Nếu hàm được định nghĩa luôn trước hàm main thì ko cần dấu ;

–         Hàm main() ko có dấu ; đi sau nó.

6. Declaration syntax error: lỗi cú pháp. Xem lại cú pháp sử dụng biến và các câu lệnh cơ bản.

 

7. Illegal charater ‘\’: lỗi khi bạn muốn thực hiện kí hiệu trong phép chia. Phép chia có kí hiệu đúng là ‘/’.

 

8. “tên_hàm(các đối số)” cannot return a value: hàm không thể trả ra giá trị: kiểm tra lại kiểu giá trị trả về của hàm. Nếu hàm trả ra giá trị void thì ko sử dụng hàm return.

 

9. Unable  to open include  file “IOSTREAM.h”…: lỗi do bộ cài thiếu thư viện hoặc đặt sai đường dẫn thư mục chứa bộ chạy Turbo C

=> Vào Option/Directories đặt được đường dẫn <Tên Ổ>:\TC\INCLUDE và <Tên Ổ>:\TC\LIB trong đó <Tên Ổ> là tên ổ đĩa trên máy bạn nơi có chứa thư mực TC.

 

10. Unterminated string or character constant: không hiểu được chuỗi kết thúc hay hằng kí tự: lỗi do khi bạn xuất một xâu ra màn hình bằng cout nhưng chỉ có dấu nháy kép “ đầu chuỗi mà chưa đóng chuỗi

=> Thêm dấu “ vào cuối chuỗi

 

Tổng hợp từ Internet.

Nhận xét của bạn

nhận xét

Tác giả songle

songle

Xem thêm

287970_8f8d_3

Tôi cần làm gì để trở thành lập trình viên Android?

Với 60 % thị phần trung bình, Android nghiễm nhiên trở thành hệ điều hành ...

Trả lời