Đầu tiên bị ướt với những điều cơ bản. Tìm hiểu các gotchas, tìm hiểu một phong cách C tốt. Bạn không thể học cách viết mã C hiệu quả trong một lần chạy, do đó, bạn có thể mắc lỗi ngay từ đầu.
Tôi đã tìm ra cách tốt nhất để tìm hiểu cách viết mã hiệu quả là tìm hiểu cách tránh rò rỉ bộ nhớ. Mã C có thể bảo trì yêu cầu tài liệu và nhận xét tốt trong nguồn. Ngoài ra, nó đòi hỏi phải viết mã chống lại sự thay đổi.
Ví dụ:
xấu dụ:
int* ptr = malloc(5 * 4); //4 here being size of int.
... do something with ptr here... //<-- this is wrong!
Tại sao xấu? int có thể không phải lúc nào cũng được 4. Ngoài ra, trong dòng thứ hai bạn đang làm một cái gì đó với ptr (có lẽ chuyển nhượng) mà không kiểm tra nếu nó là NULL.Ví dụ
tốt hơn:
int* ptr = malloc(5*sizeof(int)); // better, always allocate with respect to int size
if (ptr) ..do something..
Tại sao tốt hơn? Đầu tiên bạn được phân bổ liên quan đến kích thước của int, vì vậy ngay cả khi trong một kích thước của kiến trúc int khác nhau, bạn là tốt. Bạn cũng kiểm tra xem ptr là NULL trước khi sử dụng
dụ xuất sắc nhất:
int* ptr = malloc(5* sizeof(*ptr));
if (ptr) .. do something.
free(ptr); // done with ptr
Tại sao điều này là cách tốt nhất? Trước tiên, bạn đã liên kết kích thước phân bổ không với kích thước của int, nhưng trực tiếp với kiểu của ptr. Bây giờ nếu ai đó vì bất kỳ lý do nào thay đổi từ lâu trong tuyên bố của ptr (đặc biệt là nếu nó được tuyên bố ở nơi khác) mà không thay đổi đối số dài của bên trong malloc; phân bổ của bạn vẫn sẽ chính xác vì nó phân bổ trực tiếp theo bất kỳ loại ptr nào.
Chúng tôi cũng tự do ptr sau khi được thực hiện với nó, để ngăn chặn rò rỉ bộ nhớ.
cũng xem xét nền tảng: hiệu quả trong nền tảng nào đó không phải là nền tảng khác ... –
@Felice: Các chủ đề * sách thuật toán * bao gồm các loại giúp mã có thể mở rộng hơn trên mọi triển khai *. Không phải loại điều cung cấp cho +/- 10 ns tùy thuộc vào phần cứng hoặc trình biên dịch. – delnan
@ delnan, bạn đúng nhưng các sách thuật toán nói chung không cần thiết phải nói về một ngôn ngữ duy nhất. –