我对 c 中的结构和头文件中的声明有疑问。 我正在编写一个代码,其中有 3 个变量,另外两个变量与之相关联。所以我决定声明一个结构。下面我正在写一个伪代码
//----------registers.h---------
#ifndef __REG__H__
#define __REG__H__
struct ADE_reg_type
{
unsigned int i : 4;
unsigned int j : 4;
};
extern struct ADE_reg_type AIRMS_reg;
extern struct ADE_reg_type BIRMS_reg;
extern struct ADE_reg_type CIRMS_reg;
#endif
//-----------registers.c-------------------
#include "registers.h"
struct ADE_reg_type AIRMS_reg = {.i = 4,.j = 5}; //initializing
struct ADE_reg_type BIRMS_reg = {.i = 3,.j = 4}; //initializing
struct ADE_reg_type CIRMS_reg = {.i = 1,.j = 9}; //initializing
//-----------main.c-------------------
#include "registers.h"
int main()
{
display_numbers(AIRMS_reg); //display_numbers(struct ADE_reg_type) has
//defined in another .c file which also includes
// registers.h
}
我想要的是我应该有一个我可以在任何 .c 文件中访问的变量。变量的范围应该是全局的。那么这是使用全局结构的正确方法还是我在这里犯了一些错误?
最佳答案
//----------registers.h---------
#ifndef __REG__H__
#define __REG__H__
struct ADE_reg_type
{
unsigned int i : 4;
unsigned int j : 4;
};
#endif
//-----------registers.c-------------------
#include "registers.h"
const struct ADE_reg_type AIRMS_reg = {.i = 4,.j = 5}; //initializing
const struct ADE_reg_type BIRMS_reg = {.i = 3,.j = 4}; //initializing
const struct ADE_reg_type CIRMS_reg = {.i = 1,.j = 9}; //initializing
//-----------main.c-------------------
#include "registers.h"
extern const struct ADE_reg_type AIRMS_reg;
extern const struct ADE_reg_type BIRMS_reg;
extern const struct ADE_reg_type CIRMS_reg;
int main()
{
display_numbers(AIRMS_reg);
}
//-----------------file_1.c--------------------
#include "registers.h"
extern const struct ADE_reg_type AIRMS_reg;
extern const struct ADE_reg_type BIRMS_reg;
extern const struct ADE_reg_type CIRMS_reg;
//-----------------file_2.c--------------------
#include "registers.h"
extern const struct ADE_reg_type AIRMS_reg;
extern const struct ADE_reg_type BIRMS_reg;
extern const struct ADE_reg_type CIRMS_reg;
就像这个你说的@Elad Hazan
关于c - 头文件中的全局结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47258101/