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