调用在当前函数下声明的函数

时间:2009-07-31 02:43:27

标签: c

我是C的新手,在尝试调用在当前函数下声明的函数时遇到问题 例如:

void test (){ test1 ();}
void test1(){ }

我可以将test1移到测试之上,但我也有这个:

void test () {test1 ()}
void test4 () {test ()}
void test3 () {test4 ()}
void test1 () {test3 ()}

所以你看到如果我移动test()我会遇到test4()的相同问题吗? 我该怎么办?

谢谢

5 个答案:

答案 0 :(得分:5)

C将从上到下解析您的文件。在验证函数的使用之前,它至少需要了解函数的签名。这就是你遇到问题的原因。

如果你想在定义函数之前告诉C你需要对函数进行原型设计。这实际上是将函数的签名添加到文件中以供C处理。

例如,您可以使用以下

对test1进行原型设计
void test1();

然后你可以在定义之前调用它

void test1();
void test() { test1(); }
void test1() {}

答案 1 :(得分:2)

您需要做的是在定义函数之前“转发声明”您的函数。如:

// Declarations
void test();
void test1();

// Definitions
void test()
{ 
   // definition using test1
}

void test1()
{
   // definition using test
}

答案 2 :(得分:1)

void test();
void test1();
void test3();
void test4();

void test () {test1 ()}
void test4 () {test ()}
void test3 () {test4 ()}
void test1 () {test3 ()}

在C中,除非在函数之前定义,否则不能使用函数。这就是C的工作原理。在大多数其他语言中,编译器会处理这个问题。这称为前向声明。您只是告诉编译器,如果您在我的代码中看到testtest1test3test4没有产生错误,因为这些函数是在别处定义的我的功能。

答案 3 :(得分:0)

您可以声明函数原型:

void test();
void test1();
void test3();
void test4();

void test () {test1 ();}
void test4 () {test ();}
void test3 () {test4 ();}
void test1 () {test3 ();}

答案 4 :(得分:0)

你首先让编译器知道存在的函数:)