其他源文件中使用的结构

时间:2017-11-10 12:05:04

标签: c struct header structure extern

我有3个文件

//--------------reg_des.h---------------
struct reg
          {
              unsigned int i : 4;
              unsigned int j : 4;
          };
extern struct reg; 



//--------------reg_des.c---------------

struct reg xyz_reg = {.i = 2,.j = 1};


//--------------main.c---------------
#include "reg_des.c"
void  display_onmodule(struct reg xyz_reg_1)

int main()
{
   display_onmodule(xyz_reg);
}

void  display_onmodule(struct reg xyz_reg_1)
{
     .....
 }

这里我在头文件中声明了一个struct,并在另一个源文件中初始化了struct type的变量。 其实我想知道声明一个可能被多个源文件使用的结构的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

不,这不是设计程序的正确方法 - 这是使用全局变量的意大利面条编程。几乎不存在全局(非const)变量合理使用的情况。

此外,如果您发现需要包含.c文件,则意味着您的设计已完全失控。我们只包含.h文件。

修复程序的最简单方法是:

//--------------reg_des.h---------------
#ifndef REG_H // always use header guards!
#define REG_H    

struct reg  // note: this bit-field is completely non-portable
{
    unsigned int i : 4;
    unsigned int j : 4;
};

void reg_init (struct reg* r);

#endif // REG_H


//--------------reg_des.c---------------
#include "reg_des.h"    

void reg_init (struct reg* r)
{
  *r = (struct reg) {.i = 2,.j = 1};
}




//--------------main.c---------------
#include "reg_des.h"

void  display_onmodule(struct reg xyz_reg_1);

int main()
{
   struct reg xyz_reg;
   reg_init(&xyz_reg);

   display_onmodule(xyz_reg);

   // pass on xyz_reg to x different files here, etc
}

void  display_onmodule(struct reg xyz_reg_1)
{
     .....
}

还有更好的设计,私有封装,但上面的内容是可以接受的。