从一个函数调用到同一个C程序中的其他函数

时间:2017-03-09 13:43:53

标签: c

我正在尝试从函数(delay())调用其他相邻函数(delay_ex()bitcheck()),如下所示,并且正如预期的那样,编译器抛出了一个错误{ {1}}和delay()函数未在范围中声明,我理解我们不能调用delay_ex()以外的函数。所以,我在头文件中声明了这些maindelay()函数,并通过包含头文件从该程序调用,它运行良好。那么,有没有其他方法可以使这项工作?

delay_ex()

3 个答案:

答案 0 :(得分:4)

您可以在调用它们的代码上面编写函数,如:

void foo() {
}

void bar() {
}
int main () {
    foo();
    bar();
}

您还可以转发声明函数,如:

void foo();
void bar();
int main () {
    foo();
    bar();
}
void foo() {
}

void bar() {
}

或者您可以将它们放在头文件中并包含它

file.h:

void foo();
void bar();

file.c:

#include "file.h"
int main () {
    foo();
    bar();
}
void foo() {
}

void bar() {
}

答案 1 :(得分:2)

编译器一次性工作,因此在解析bitcheck()时,delay()delay_ex()的签名是未知的,因此编译器无法验证调用是否为类型 - 正确的。

规则是在使用前声明或定义;有两种可能的解决方案:

  • bitcheck()delay()
  • 的定义之后定义delay_ex()
  • 转发声明delay()delay_ex()

通过在标题中声明函数并在定义bitcheck()之前将其包含在中,您使用了第二种解决方案,但使用包含文件并不重要 - {{1}不仅仅是在编译之前将文件内容插入翻译单元。当从与定义它们的转换单元不同的转换单元调用符号时,这很有用;如果这不是预期的,则声明可以直接写入,而不是#include' d,并且还应该声明为#include,以避免与其他翻译单元的外部链接和潜在的名称冲突。 / p>

答案 2 :(得分:0)

你需要在bitcheck之前定义delay和delay_ex。只需将这两个功能移到bitcheck上方即可。