tôi có một loạt các chức năng với nguyên mẫu cùng, nóiNguyên mẫu hàm typedef có thể được sử dụng trong định nghĩa hàm không?
int func1(int a, int b) {
// ...
}
int func2(int a, int b) {
// ...
}
// ...
Bây giờ, tôi muốn đơn giản hóa định nghĩa và khai của họ. Dĩ nhiên tôi có thể sử dụng một macro như thế:
#define SP_FUNC(name) int name(int a, int b)
Nhưng tôi muốn giữ nó trong C, vì vậy tôi cố gắng sử dụng specifier lưu trữ typedef
cho việc này:
typedef int SpFunc(int a, int b);
Điều này dường như làm việc tốt cho việc kê khai:
SpFunc func1; // compiles
nhưng không cho định nghĩa:
SpFunc func1 {
// ...
}
mà mang lại cho tôi những lỗi sau:
error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
Có cách nào để làm điều này một cách chính xác hoặc là nó không thể? Để hiểu biết của tôi về C điều này sẽ làm việc, nhưng nó không. Tại sao?
Note, gcc hiểu những gì tôi đang cố gắng để làm, bởi vì, nếu tôi viết
SpFunc func1 = { /* ... */ }
nó nói với tôi
error: function 'func1' is initialized like a variable
Có nghĩa là gcc hiểu rằng SpFunc là một chức năng kiểu.
Tôi sợ điều này. Cảm ơn bạn đã xác nhận điều này. Có lý do nào cho việc này không? Dường như với tôi như một tính năng hữu ích. – bitmask
@bitmask: các hàm có thể chia sẻ typedef, nhưng có các đối số được đặt tên khác nhau - tên không phải là một phần của chữ ký hàm và thậm chí có thể bị bỏ qua nếu khai báo không phải là một phần của định nghĩa – Christoph