所以我在头文件中定义了一个struct,用于在程序中访问。然后我在. c文件中定义了一个单独的struct,目的是将一个struct的内容复制到另一个struct。然而,当我尝试这样做时,我得到了错误:"错误:'pcb'未声明(第一次在此函数中使用)reg. pc = pcb. pc;"
/* header file */
struct Registers {
int PC;
int IR0;
int IR1;
int AC;
int MAR;
int MBR;
int Base;
}; struct Registers reg = {0, 0, 0, 0, 0, 0, 0};
/* computer.c */
#include <stdio.h>
#include "computer.h"
void process_init_PCB() {
struct PCB {
int PC;
int IR0;
int IR1;
int AC;
int MAR;
int MBR;
int Base;
}; struct PCB pcb = {0, 0, 0, 0, 0, 0, 0};
}
void process_set_registers() {
reg.PC = pcb.PC;
reg.IR0 = pcb.IR0;
reg.IR1 = pcb.IR1;
reg.AC = pcb.AC;
reg.MAR = pcb.MAR;
reg.MBR = pcb.MBR;
reg.Base = pcb.Base;
}
我试过在set registers函数中插入外部结构标记,但它也给了我错误。
就像这样:
void process_set_registers() {
extern struct pcb;
reg.PC = pcb.PC;
reg.IR0 = pcb.IR0;
reg.IR1 = pcb.IR1;
reg.AC = pcb.AC;
reg.MAR = pcb.MAR;
reg.MBR = pcb.MBR;
reg.Base = pcb.Base;
}
2条答案
按热度按时间egdjgwm81#
正如注解中提到的,您的变量'pcb'是局部变量,无法在函数'process_set_registers'中访问。
在你的代码中,你声明了结构并赋值,你可能需要一个函数来帮你做这些,有时候,指针会帮你做这些。
你可以用指针和内存分配来创建类结构。下面是使用指针来实现你的目标的可能实现。
我不明白你为什么在代码中两次使用相同的结构。(寄存器和PCB)你能解释一下为什么吗?
[编辑]
computer. h可以通过声明和实现来拆分。
一个二个一个一个
【注】
C语言中的函数声明不要求包含其参数名。
代码如下,
会变成这样。
bvjxkvbb2#
你不能直接从另一个函数的语言环境中访问一个局部变量。为此你必须以某种方式提取变量。这些路径可以是通过return、Reference参数或指针。但是这里你还需要考虑变量的生存期。
没有其他方法可以在全局域中定义这个变量。这样做的缺点是它可能会一直保留在内存中直到程序结束。这取决于你在做什么。