Tôi đã đi qua các mã sau đây, và là một người mới bắt đầu C, tôi đến đây để được giúp đỡ của bạn.Khai báo một hàm bên trong một hàm?
Chức năng này là từ một c implmentation của một hàng đợi.
Bool queuePut(Queue *q, char c)
{
void beep();
if (queueFull(q))
{
beep();
return false;
}
//do stuff
return true;
}
Vì vậy, tôi gặp lỗi lạ với gcc trên khoảng trống bíp(). Ai đó có thể vui lòng giải thích cho tôi những gì được điều này, tuyên bố một chức năng bên trong một chức năng. Hoặc là nó beep void() chỉ đơn giản là ra khỏi vị trí? Tôi đã được cung cấp mã này và luôn có khả năng nó không chính xác.
Edit: Các lỗi Tôi nhận:
c:/djgpp/tmp/src/ccrjtmBh.o:queue.c:(.text+0x50): undefined reference to
'_beep'
collect 2: ld returned 1 exit status.
Đây có phải là một lỗi liên kết?
Lỗi gì? ___ – kennytm
Có, đó là lỗi liên kết. Bạn không chỉ phải khai báo mỗi hàm mà bạn sử dụng - bạn cũng phải định nghĩa tất cả chúng, hoặc liên kết với các thư viện để xác định các hàm. Vì các thư viện của bạn không định nghĩa 'beep()', bạn phải làm như vậy. –
Và, như một quy tắc chung, các hàm cần được khai báo trong các tiêu đề và các tiêu đề được sử dụng; tuyên bố một chức năng bên trong một chức năng khác như thế là một công thức cho các vấn đề bảo trì sau này. –