编译器在包含其他库后不接受外部变量

标签 c extern

我有一个问题,我需要将一个文件中的变量外部化到另一个文件中,并且我需要包含一个库。问题是,当我包含库时,编译器会给出一个错误,指出变量未定义。

外部文件:

#include <stdio.h>
#include "PHY.h"

void InterruptHandler();

extern int flag;
extern long toSend;
extern int recieved;
void InterruptHandler()
{
    //here i use the flag
}

主要内容:

#include <stdio.h>
#include "PHY.h"
void main()
{
    int flag;       //  DETERMINATES CLOCK STATUS
    int recieved;
    long toSend;    //  THE DATA WE WANT TO SEND (for instance 0x12345678)
    toSend  =   0x12345678; // EXAMPLE
    // .... here the code continues..
}

最佳答案

您不能使函数的局部变量(例如,main() 中的flag)在函数外部的任何地方直接可见,更不用说通过外部

您需要将这些局部变量移动到 main() 之外,使它们成为普通的全局变量。可以通过“外部”文件中的 extern 访问它们。

此外,由于代码表明您正在处理其中的中断,因此使在 ISR 中访问的那些全局变量volatile。如果不这样做,对它们的更改可能在 ISR 中或 ISR 之外是不可见的。

关于编译器在包含其他库后不接受外部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15727659/

相关文章:

c - 为什么使用 File1 中定义的数组在 File2 中工作(仅在那里声明),即使没有 "extern"?

c - 结构声明与定义

c++ - 在存在不可预测的类型别名的情况下如何处理显式模板实例化?

c - 计算一个数组但将值写入另一个数组时出现问题

c - 将 native 数据类型初始化为 "zero"的一般操作

c - 如何使用.so文件运行c程序

c - 使用 extern 关键字在多个源文件上定义全局变量

c++ - 为什么extern可以应用于定义?

c++ - 获取进程句柄的详细信息

c++ - 不受主存储器约束的函数所需的复杂性是多少?