Tôi đã triển khai cấu trúc hàng đợi cơ bản trong C bằng cách sử dụng con trỏ void. Thủ tục như sau:Thực hiện hàng đợi C bằng cách sử dụng void * - thực hành tốt hay xấu?
- khởi tạo cấu trúc - Tôi thiết lập kích thước của các loại biến được lưu trữ trong hàng đợi
- push - tôi vượt qua con trỏ đến các biến phải được lưu trữ, hàng đợi sau đó lấy bản sao cho chính nó
- trước - cấu trúc trả về khoảng trống * cho phần tử ở phía trước. Tôi có thể chỉ cần lấy con trỏ, hoặc
memcpy()
nó để có một bản sao cục bộ.
Các struct bản thân trông như thế này:
struct queue
{
void* start; //pointer to the beginning of queue
void* end; //-||- to the end
size_t memsize; //size of allocated memory, in bytes
size_t varsize; //size of a single variable, in bytes
void* initial_pointer; //position of the start pointer before pop() operations
};
bắt đầu và kết thúc chỉ là con trỏ void trỏ đến một số vị trí trong khối bộ nhớ hiện đang được phân bổ. Nếu tôi đẩy các phần tử vào hàng đợi, tôi sẽ tăng con trỏ kết thúc lên varsize
. Nếu tôi bật(), tôi chỉ cần giảm con trỏ cuối cũng bằng varsize
.
Tôi không nghĩ mình nên đăng mã chức năng ở đây, nó có trên 100 dòng.
Câu hỏi: được coi là thực tiễn tốt hay xấu? Tại sao không)?
Lưu ý: Tôi biết rằng có nhiều tùy chọn khác cho hàng đợi trong C. Tôi chỉ hỏi về chất lượng của hàng này.
EDIT: Việc thực hiện có sẵn ở đây: http: // 89.70.149.19 /stuff/queue.txt (loại bỏ các khoảng trắng)
Sử dụng size_t cho kích thước bộ nhớ –
Tôi nghĩ tốt để viết mã chung bằng cách sử dụng 'void *' –
@RanEldan Cảm ơn bạn, tôi sẽ. Đã sửa nó ở đây. – szczurcio