main.c是';t从键盘识别变量。c
我一直试图在Atmel Studio中编写一个atmega328p(很有趣),但当我试图将键盘代码分离到它自己的c文件中时,我遇到了一个错误main.c是';t从键盘识别变量。c,c,header-files,atmega,atmelstudio,C,Header Files,Atmega,Atmelstudio,我一直试图在Atmel Studio中编写一个atmega328p(很有趣),但当我试图将键盘代码分离到它自己的c文件中时,我遇到了一个错误 Error 'keypad' undeclared (first use in this function) invisible_alarm C:\Users\kenkr\Documents\Atmel Studio\7.0\invisible_alarm\invisible_alarm\main.c 39 键盘在单独的文件中定义
Error 'keypad' undeclared (first use in this function) invisible_alarm C:\Users\kenkr\Documents\Atmel Studio\7.0\invisible_alarm\invisible_alarm\main.c 39
键盘在单独的文件中定义,我排除了以下几点:
- 我没有忘记h文件(使用keypad.h works中定义的符号)
- 编译器没有忽略keypad.c(编译输出中会出现keypad.c中的错误)
- 我没有忘记将.c/.h文件添加到项目中(它们出现在解决方案资源管理器中)
//keypad.c
#包含您需要在头文件中声明变量:
// keypad.h
#ifndef _KEYPAD_H_
#define _KEYPAD_H_
#include <stdint.h> // commonly needed for uint16_t
#define KEY_1 0
#define KEY_4 1
// ...
extern uint16_t keypad;
#endif
//keypad.h
#ifndef\u键盘\u H_
#定义小键盘_
#包括//uint16\U t通常需要的
#定义键_1 0
#定义键4 1
// ...
外部uint16_t键盘;
#恩迪夫
您的头文件缺少外部uint16\t键盘代码>或类似的。谢谢我不知道你也可以在头文件中定义状态。如果是这样的话,也许我可以把所有的东西都放进一个.h文件。不。您不能将所有内容都放在.h文件中,至少您不应该这样做。我建议你通读一些c头文件教程/解释。这能回答你的问题吗@皮洛克为什么不呢?有很多教程说你应该使用.c文件,但我还没有看到一个给出一个很好的理由。
// keypad.h
#ifndef _KEYPAD_H_
#define _KEYPAD_H_
#define KEY_1 0
#define KEY_4 1
// ...
#endif
// keypad.c
#include <avr/io.h>
#include <util/delay.h>
#include "keypad.h"
#define NULL 0
uint16_t keypad = 0x0000;
// ...
// keypad.h
#ifndef _KEYPAD_H_
#define _KEYPAD_H_
#include <stdint.h> // commonly needed for uint16_t
#define KEY_1 0
#define KEY_4 1
// ...
extern uint16_t keypad;
#endif