【问题标题】:Best practice to use extern struct or extern pointer to struct?使用外部结构或外部指针指向结构的最佳实践?
【发布时间】:2013-04-07 23:18:55
【问题描述】:

假设我有 3 个文件:file1.c、file2.c 和 globals.h。 file1.c 和 file2.c 都包含 globals.h。 file1.c 包含 file2.c 需要使用的结构。将结构本身设为外部或创建指向该结构的指针并在 globals.h 中将该指针设为外部更好?

【问题讨论】:

  • 这两种情况做不同的事情,所以它们不是替代品。

标签: c pointers struct extern


【解决方案1】:

如果我理解正确并且您的“结构”应该是一个全局对象(这是一个有问题的设计选择),那么我会这样做:

foo.h:

typedef struct foo_struct
{
    /* ... */
} foo;

extern foo the_foo;

foo.c: [如果你喜欢并且有意义,你可以将它合并到 file1.c 中。]

#include "foo.h"

foo the_foo = { /* ... */ };

file1.cfile2.c

#include "foo.h"
#include "global.h"

/* ... */

【讨论】:

  • 我是 C 新手。为什么这个设计选择有问题?跨多个文件共享相同结构的最佳做法是什么?
  • 在大多数语言中,全局变量是不受欢迎的,因为当您共享全局状态(以及其他原因)时,它会使调试和测试程序的孤立部分变得更加困难。
  • @MichaelMior 这是否意味着应该使用 getter 函数将结构从文件传递到文件?
  • @user1172282 这意味着如果 file1.c 和 file2.c 中的代码函数需要访问 struct foo 他们应该将其作为参数通过地址(或值)传递,而不是依赖于外部全局。 Globals 有他们的位置,但你真的必须向某些人证明它是合理的(我就是其中之一)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
  • 2017-01-29
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
相关资源
最近更新 更多