c - 头文件中是否需要函数原型(prototype)?

标签 c function header

我在 robotc 中编程,它只是带有插件的 c 编程(遵循所有 c 规则)。为了组织我的代码,我将我的子例程放在头文件中,并从我的主 c 文档中引用。我是否仍然可以从 c 文档中引用头文件中的方法而不将函数原型(prototype)放入 标题?

例如:

main1.c中的代码

    #include header1.h
    task main()
    {
      header_method();
    }

header1.h 中的代码(无函数原型(prototype))

   header_method()
   {
   //do stuffs
   }

或者我必须这样做:

   void header_method();

   header_method()
   {
   //do stuffs
   }

原因是我只能在robotc中为我的机器人声明一定数量的全局变量。

最佳答案

您应该(几乎)永远不要将函数定义 放在头文件中,就像您在header1.h 中所做的那样。

头文件应包含函数声明(原型(prototype))。

(“原型(prototype)”是指定参数类型的函数声明。存在不指定参数类型的非原型(prototype)函数声明,但它们已经过时,没有理由使用它们。)

函数定义(带有实现该函数的{ ... }代码)应该在.c 文件。

每个.c 文件都应该有一个#include 指令,用于它调用或定义 的任何函数。

并且每个头文件都应该被include guards保护免于被多重包含.

想法是每个函数声明在每个翻译单元(您编译的每个源文件)中只出现一次,并且每个函数定义 在整个程序中只出现一次。

如果你有一个只在一个 .c 文件中使用的函数,你可以把它的声明和定义放在同一个 .c 文件中(你应该定义它作为 static)。事实上,如果定义出现在任何调用之前,您可以省略单独的声明;定义本身充当声明。

(定义为 inline 的函数会使这个模型稍微复杂一些;我建议暂时不要担心这个。)

关于c - 头文件中是否需要函数原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20180734/

相关文章:

jQuery 和 AJAX 响应头

c - 当函数返回指针时,为什么我得到 "initialization makes pointer from integer"?

c++ - IPv6 下的网络字节顺序是否毫无意义?

c - 如何使用 cppcheck 在控制台中的项目中执行?,也许在 makefile 中搜索引用?

php - 如何在php中同一表单内的另一个提交按钮使用一个提交按钮的变量

c - 当提示用户输入 CELSIUS 值时,为什么我的 CELSIUS 到 RANKINE 转换失败?

javascript - 为什么 "this"会得到不同的值?

php - Pico CMS 自定义 header

c - 为什么这段代码在进入 do 循环之前给我一个段错误?

java - 知道要发送到服务器的 header