在 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 中通过多个头文件和源文件组织变量和函数时出现警告的主要内容,如果未能解决你的问题,请参考以下文章