在函数内声明一个函数?

时间:2010-03-20 19:55:46

标签: c

我遇到了以下代码,作为C初学者,我来到这里寻求帮助。

此功能来自队列的实施。

Bool queuePut(Queue *q, char c) 
{
    void beep();

    if (queueFull(q)) 
    {
        beep();
        return false;
    }

    //do stuff

    return true;
}

所以,我在void beep()上遇到gcc的奇怪错误。有人可以解释一下这是什么,在函数内声明一个函数。或者是无效的蜂鸣声()只是不合适?我得到了这个代码,并且总是有可能它不正确。

编辑:我得到的错误:

c:/djgpp/tmp/src/ccrjtmBh.o:queue.c:(.text+0x50): undefined reference to
    '_beep'
collect 2: ld returned 1 exit status.

这是链接错误吗?

3 个答案:

答案 0 :(得分:4)

很可能您遇到了链接错误,因为:

void beep();

是必须在别处定义的函数的原型。在C中,你不能定义另一个中的函数。请详细说明你得到的错误。

答案 1 :(得分:3)

这是不寻常但合法的。如果在其他地方没有定义实际beep(),则您看到的错误可能来自链接器。你能发布你收到的实际错误吗?

答案 2 :(得分:1)

正如其他人已经注意到这里发生的事情是你的函数声明了一个名为“beep”的函数的原型。解决此问题的方法是确保编辑或链接中包含函数蜂鸣声。

第一步是确保您正在编译收到的所有文件并链接所有受支持的.lib

如果这不起作用,您可以自己添加方法;)

void beep() {
  printf ("beep\n");
}