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

发布于 2025-01-05 08:17:11 字数 765 浏览 1 评论 0原文

我第一次尝试为一个简单的程序编写真正的专业 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.hi 中正常声明函数并

void test ();

在我的 Essential_data.h 仅在主函数中而不在其他地方写入两次。

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

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

For the first time i was trying to write an actual professional C code for a simple program.

1)I made a header file name Essential_data.h and declared all my functions and global variables in that. I had declared all my variables as extern.. And all function declaration were made normally

eg:

void test ();
extern int x;

2)Then i made another header file named main_data.h and defined all my global variables there.
for eg:int x;

3)I then made corresponding source files containing the definition of the respective functions and included main_data.h in sourcefiles that needed that global variable.

thats all. After when i compiled the project i got many warnings for all functions as

Implicit declaration of function test [-Wimplicit-function-declaration]

so after that i did the following

1) I put an extern in front of the functions declarations in Essential_data.h.
for eg:

extern void test();

2) in the main_data.h i declared the functions normally and wrote

void test ();

both the times my Essential_data.h was in the main function only and no where else.

And then recompiled and later all the warnings disappeared.

So was that the right method or is there any other way of organising them more efficiently?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

腻橙味 2025-01-12 08:17:11

您应该有:

  • 一个或多个包含外部声明(函数和对象)的 .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"

/* ... */

You should have:

  • One or more .h files containing extern declarations (functions and objects). These files needs to be included by the .c files that need those symbols. You shouldn't have multiple declarations (each identifier should be declared exactly once)

  • One or more .c files in which you define the functions and objects

In your example:

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

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

int x;
void test()
{
    /* ... */
}

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

/* ... */
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文