Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 调用在当前函数下声明的函数_C - Fatal编程技术网

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

C 调用在当前函数下声明的函数,c,C,我是C语言的新手,在尝试调用在当前函数下声明的函数时遇到了问题 例: 我可以将test1移到test之上,但我也有这样的功能: void test () {test1 ()} void test4 () {test ()} void test3 () {test4 ()} void test1 () {test3 ()} 那么您看到了吗,如果我移动test(),对于test4(),我会遇到同样的问题吗? 我能做什么 谢谢 void test(); void test1(); void test

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

我可以将test1移到test之上,但我也有这样的功能:

void test () {test1 ()}
void test4 () {test ()}
void test3 () {test4 ()}
void test1 () {test3 ()}
那么您看到了吗,如果我移动test(),对于test4(),我会遇到同样的问题吗? 我能做什么

谢谢

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
,则不会产生错误,因为这些函数是在其他地方定义的,而不是在我的函数之前。

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

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

例如,您可以使用以下内容创建test1原型

void test1();
然后可以在定义之前调用它

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

您可以声明函数原型:

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

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

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

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

// Declarations void test(); void test1(); // Definitions void test() { // definition using test1 } void test1() { // definition using test } //声明 无效试验(); void test1(); //定义 无效测试() { //使用test1定义 } void test1() { //使用测试定义 }
调用之前不需要定义函数,只需要声明它。即使这样,如果不声明它,它也会隐式声明为int function();如果声明与定义兼容,这是可以的(但不是好的做法)。我的意思是,如果你不想声明它,你必须在函数之前定义它。 // Declarations void test(); void test1(); // Definitions void test() { // definition using test1 } void test1() { // definition using test }