在 C 中通过多个头文件和源文件组织变量和函数时出现警告

Posted

技术标签:

【中文标题】在 C 中通过多个头文件和源文件组织变量和函数时出现警告【英文标题】:Warnings while organising variables and functions in C over multiple header and source files 【发布时间】:2012-02-14 22:07:24 【问题描述】:

我第一次尝试为一个简单的程序编写一个真正的专业 C 代码。

1)我创建了一个头文件名 Essential_data.h 并在其中声明了我的所有函数和全局变量。我已将所有变量声明为 extern.. 并且所有函数声明都是正常进行的

例如:

void test ();
extern int x;

2) 然后我创建了另一个名为 main_data.h 的头文件并在那里定义了我所有的全局变量。 例如:int x;

3)然后我制作了包含相应函数定义的相应源文件,并将 main_data.h 包含在需要该全局变量的源文件中。

仅此而已。在我编译项目后,我收到了很多关于所有功能的警告

函数测试的隐式声明[-Wimplicit-function-declaration]

所以之后我做了以下操作

1) 我在 Essential_data.h 中的函数声明前面放了一个 extern。 例如:

extern void test();

2)在main_data.h中我正常声明了函数并写了

void test ();

我的 Essential_data.h 两次都只在主函数中,而在其他任何地方都没有。

然后重新编译,后来所有的警告都消失了。

那是正确的方法还是有其他方法可以更有效地组织它们?

【问题讨论】:

最后一句你指的是什么“写法”? 正确的方法,就像我想说的那样,无论我做什么都是标准编程??我的意思是这是专业组织头文件和源文件的方式吗? 【参考方案1】:

你应该有:

一个或多个包含外部声明(函数和对象)的 .h 文件。这些文件需要包含在需要这些符号的.c 文件中。你不应该有多个声明(每个标识符应该只声明一次

一个或多个 .c 文件,您可以在其中定义函数和对象

在你的例子中:

/* essential_data.h */
void test ();
extern int x;

/* something.c */
#include "essential_data.h"

int x;
void test()

    /* ... */


/* main.c */
#include "essential_data.h"

/* ... */

【讨论】:

我的模式完全相同,只是我只在主文件中包含了 essential_data.h。 更新:我从 main_data.h 中删除了所有 extern 函数声明,只在函数的源文件中包含 Essential_data.h,警告消失了。谢谢 cnicutar!!

以上是关于在 C 中通过多个头文件和源文件组织变量和函数时出现警告的主要内容,如果未能解决你的问题,请参考以下文章

C语言的重定义错误,求解

有没有办法在 C 的同一个头文件中拥有静态原型和公共原型?

计算机二级c和c++区别

一个c语言工程中可以有几个头文件,两个文件间函数调用其中之一要是头文件吗?

在每个源文件中包含一个头文件

c语言,定义一个函数,没做过多的说明,那么此函数能被其他源文件调用么?