将结构声明为extern并在不同文件中使用相同变量

时间:2018-07-03 19:37:15

标签: c struct extern

我需要澄清有关使用结构和外部元素的信息。我的代码就是这样。

cfile.c

volatile struct my_struct{
        char *buf;
        int size;
        int read;
        int write;
    }rx,tx;

void foo1()
{
    rx.size = 256;
    rx.buf = (char *)malloc(rx.size * sizeof(char));
    rx.read = 0;
    rx.write = 0;
    tx.size = 256;
    tx.buf = (char *)malloc(tx.size * sizeof(char));
    tx.read = 0;
    tx.write = 0;
}

xyzFile.c

//extern the structure

在此函数中使用结构变量

void foo2(void)
{
        int next;

        next = (rx.write + 1)%rx.size;
        rx.buf[rx.write] = data;
        if (next != rx.read)
            rx.write = next;
}

在此函数foo中,我正在获取此数据rx.buf,并希望在cfile.c中使用此数据。我该怎么办?

先谢谢了。

1 个答案:

答案 0 :(得分:2)

引入标题,例如myheader.h。
在内部声明数据类型并声明外部变量。

#ifndef MYHEADER_H
#define MYHEADER_H

struct my_struct{
    char *buf;
    int size;
    int read;
    int write;
};

extern struct my_struct rx;
extern struct my_struct tx;
#endif

两个/所有代码文件中都包含标头

#include "myheader.h"

不要忘记仍然在代码文件之一中定义变量,
但不要使用显示的代码中类型声明和变量定义的“简写”组合。
只需使用标头中声明的类型,请注意缺少extern
即将其替换为cfile.c

volatile struct my_struct{
    char *buf;
    int size;
    int read;
    int write;
}rx,tx;    

通过此操作,但仅在此一个.c文件中。

struct my_struct rx;
struct my_struct tx;