c - code.c 和 code.h 的区别

标签 c

我正在学习 C,我在一些示例中看到代码是用 .h 保存的,我不确定什么时候应该将代码保存到 .h。以 .c 结尾的文件包含 main() 而以 .h 结尾的文件可能包含全局变量或函数的声明(但不是 main() )?

最佳答案

在最简单和最抽象的层面上:

.c 文件应包含实现您的功能的代码。

.h 文件应该包含代码的“接口(interface)”。

.h 文件包含其他代码使用 .c 文件中的代码所需的所有内容。

例如,如果您有一个将两个整数相加的函数,它可能如下所示:

// in the .c file: the actual implementation of the function
int add_two_integers(int a, int b)
{
    return a + b;
}

// in the .h file: just the interface
int add_two_integers(int a, int b);

.h 文件包含一些代码为了使用.c 文件中的函数而需要知道的所有内容。在这种情况下,只有一个函数,.h 文件包含它的名称和与其关联的所有类型信息。

另一种思考方式:.h 文件包含一个“ promise ”,即有一个名为 add_two_integers() 的函数可供您使用,它告诉如何使用它。 .c 文件中的代码可能会被编译为一个库文件,而 C 编译器不会查看库文件内部并找出其中的内容。您可以使用 .h 文件告诉 C 编译器期望什么。

在某种意义上,.c 文件中的内容与.h 文件中的内容之间的区别是实现细节。可以制作一个扫描 .c 文件两次的系统,一次编译它,一次提取接口(interface)信息。但在 C 中,将两者分开是你的工作。

可能进入 .h 文件的其他内容:预定义常量、自定义数据类型、宏和内联函数。宏和内联函数在逻辑上是代码,因此理想情况下应该在 .c 文件中,但如上所述,这不是 C 中实现的方式。编译器需要了解宏和内联函数,所以如果你想分享它们,你可以在 .h 文件中分享它们。

关于c - code.c 和 code.h 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20212395/

相关文章:

c++ - 将 C 和 C++ 与 CMAKE 混合

c - 将缓冲区传递给 curl_slist_append 后立即释放缓冲区

c - 无法写入共享内存段

c - 信号量和共享内存

c - 我的代码如何创建代码并在 C 中调用它?

c++ - srand()的含义

C分配不同大小的二维数组

c - 使用 extern 关键字的链接出现 undefined reference 错误

c - 在 C99 : how to access a specific byte within a long double variable

c - mkfifo() 和 mknod() 的区别