Gần đây tôi đã viết một đoạn mã C như thế:Tôi có nên xem xét việc khai báo tất cả các hàm tĩnh C là một tính năng tốt?
static void func1()
{
}
static void func2()
{
}
typedef void (*func_t)(void);
const func_t lookUpTable[FUNC_COUNT] =
{
[FUNC1] = &func1,
[FUNC2] = &func2
}
Một lập trình viên khác làm việc trên cùng một tập tin và thay đổi nó để:
static void func1();
static void func2();
typedef void (*func_t)(void);
const func_t lookUpTable[FUNC_COUNT] =
{
[FUNC1] = &func1,
[FUNC2] = &func2
}
static void func1()
{
}
static void func2()
{
}
Kể từ khi funcN chức năng chỉ được gọi là thru bảng tra cứu, tôi không thực sự cần các khai báo của các hàm đó.
Đây có phải là vấn đề về hương vị hay là có một kiểu mã hóa được coi là thực hành tốt/xấu?
Cảm ơn câu trả lời của bạn!
"Tôi không thực sự cần khai báo" - Bạn vẫn làm! Nếu không có bạn không thể sử dụng tem trong bảng của bạn. Bỏ qua 'static' OTOH không làm cho _declaration_ extern, chỉ có tên/biểu tượng. – Olaf
Có thể có vấn đề về từ vựng ở đây. Có tốt hơn nếu tôi nói "Tôi không cần các nguyên mẫu"? Ý tôi là khi tôi * định nghĩa * các hàm được * khai báo * cùng một lúc. Nó là một phần quan điểm của bạn? Về phần cuối của nhận xét của bạn: có nghĩa là không có 'tĩnh', tên/biểu tượng sẽ được công khai. Và vì vậy, nếu tên này được sử dụng trong một đơn vị dịch thuật khác thì việc biên dịch sẽ bị phá vỡ vì không thể tìm thấy nội dung/triển khai (?)? – Plouff
1) sử dụng '@ name' để thêm nhận xét đáng tin cậy. Nhận xét cuối cùng của bạn không làm cho nó rõ ràng hơn với tôi. Có lẽ nhận xét ban đầu của tôi trở nên rõ ràng hơn ở giữa rằng tôi có xu hướng sử dụng từ vựng C chuẩn. Chỉ cần có một cái nhìn vào nó. Và bạn ** cần ** các nguyên mẫu (trong đó ** là ** _declarations_). Và không có 'static', một tên được khai báo ở phạm vi tệp có _external linkage_. Cụm từ "công khai" không được tiêu chuẩn sử dụng (và có nghĩa khác, ví dụ: trong C++). – Olaf