Ví dụ: nếu bạn cần đảm bảo rằng một hàm có một loại nhất định, nó có thể hữu ích.
Hãy xem xét điều này:
// Define how the functions should be defined.
typedef void * jobfunc(void *);
// Use case
void addjob(jobfunc *);
// Ensure they have the right type. Without this, you only get a warning
// for addjob(job2) (see below) - with it, you get an error for the mismatch.
static jobfunc job1;
static jobfunc job2;
// Define one job
static void * job1(void * arg) {
return NULL;
}
// Define another job - accidentally wrong.
static void * job2(int accidentally_wrong) {
return NULL;
}
Tôi nghĩ rằng bằng cách sử dụng typedef như một số loại mẫu chức năng là thực hành khá mơ hồ, nó rất có thể chỉ gây nhầm lẫn cho người đọc. Ví dụ, tôi mất một thời gian để giải thích mã của bạn thực sự làm gì. Phản ứng tức thời nhưng không chính xác của tôi đối với mã là "aha - con trỏ hàm". – Lundin
@Lundin Bạn đang ở ngay khi nó không bình thường. Nhưng nó thực hiện công việc của mình. Có lẽ kiểu trả về 'void *' đã thêm vào sự nhầm lẫn - như một ví dụ, tôi nên lấy một kiểu khác. Tuy nhiên, tôi không hiểu tại sao điều này lại quá bất thường - thật tuyệt vời để đảm bảo đúng loại và, ngoài khả năng đọc và nhầm lẫn do sự không rõ, tôi không thể thấy bất lợi. – glglgl