我是C的新手,在尝试调用在当前函数下声明的函数时遇到问题 例如:
void test (){ test1 ();}
void test1(){ }
我可以将test1移到测试之上,但我也有这个:
void test () {test1 ()}
void test4 () {test ()}
void test3 () {test4 ()}
void test1 () {test3 ()}
所以你看到如果我移动test()我会遇到test4()的相同问题吗? 我该怎么办?
谢谢
答案 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的工作原理。在大多数其他语言中,编译器会处理这个问题。这称为前向声明。您只是告诉编译器,如果您在我的代码中看到test
,test1
,test3
,test4
没有产生错误,因为这些函数是在别处定义的我的功能。
答案 3 :(得分:0)
您可以声明函数原型:
void test();
void test1();
void test3();
void test4();
void test () {test1 ();}
void test4 () {test ();}
void test3 () {test4 ();}
void test1 () {test3 ();}
答案 4 :(得分:0)
你首先让编译器知道存在的函数:)