我正在用robotc编程,这只是带有附加程序的c编程(遵循所有c规则)。为了组织我的代码,我已将子例程放在头文件中并从我的主c文档进行引用。我是否仍可以引用c文档的头文件中的方法,而无需将函数原型放在头文件中?
例如:
main1.c中的代码
#include header1.h
task main()
{
header_method();
}
Run Code Online (Sandbox Code Playgroud)
header1.h中的代码(无函数原型)
header_method()
{
//do stuffs
}
Run Code Online (Sandbox Code Playgroud)
还是我必须这样做:
void header_method();
header_method()
{
//do stuffs
}
Run Code Online (Sandbox Code Playgroud)
原因是我只能在robotc中为我的机器人声明一定数量的全局变量。
您应该(几乎)永远不要像在中那样将函数定义放在头文件中header1.h。
头文件应包含函数声明(原型)。
(“原型”是指定参数类型的函数声明。有一些非原型函数声明未指定参数类型,但是它们已经过时,因此没有理由使用它们。)
函数定义(带有实现该函数的{... }代码)应位于.c文件中。
每个.c文件都应具有#include针对其调用或定义的任何功能的指令。
并且每个头文件都应该通过包括保护项来防止多重包含。
这个想法是每个函数声明在每个翻译单元(您编译的每个源文件)中仅出现一次,而每个函数定义在整个程序中仅出现一次。
如果您有一个仅在一个.c文件中使用的函数,则可以将其声明和定义放在同一.c文件中(可能应该将其定义为static)。实际上,如果定义出现在任何调用之前,则可以省略单独的声明;该定义本身就是一个声明。
(定义为的函数inline会使该模型稍微复杂一些;我建议暂时不要为此担心。)