我有点困惑整个包括头文件和变量声明.
我使用的文件是:main.c,lib.h和lib.c.
#include "lib.h"
void main(void)
{
// Code here
var++;
}
Run Code Online (Sandbox Code Playgroud)
#include <avr/io.h>
#include "lib.h"
void light_led(void)
{
// Code here
}
Run Code Online (Sandbox Code Playgroud)
volatile int var;
void light_led(void);
Run Code Online (Sandbox Code Playgroud)
这是制作和包含您自己的定制库的正确方法吗?
您应该extern为这种情况使用关键字,而不是在标头中定义全局变量.否则,链接器将在对头文件进行操作时抛出错误.
lib.c
#include <avr/io.h>
#include "lib.h"
volatile int var;
void light_led(void)
{
//code here
}
Run Code Online (Sandbox Code Playgroud)
lib.h
extern volatile int var;
void light_led(void);
Run Code Online (Sandbox Code Playgroud)
这样,您将在标头中声明全局变量,并在相应的源文件中实际定义它lib.c.
注意:请注意声明和定义变量之间的区别.externkeyword允许在不定义的情况下提前声明变量.如果您没有定义变量lib.c,则在尝试使用此变量时会出现错误.因为,它只是声明,但实际上没有定义.
编辑:完整的目的static是声明一个变量对于声明的源文件是私有的.因为,extern通过链接另一个源文件中定义的变量来反过来,它就失败了static.extern说变量有外部连接static说变量有内部连接.标识符不能同时具有内部和外部链接.
根据MSND:
修改变量时,static关键字指定变量具有静态持续时间(在程序开始时分配,在程序结束时释放)并将其初始化为0,除非指定了另一个值.在文件范围内修改变量或函数时,static关键字指定变量或函数具有内部链接(其名称在声明它的文件外部不可见).
有关更多信息,请查看以下