怎么定义一个变量在多个c文件中使用?

比如说我要定义一个timedata[]数组,这个数组我要在ds1302.c中将读到的时间保存到里面,再在main.c上将timedata[]显示出来,我该把timedata定义在哪里呢,定义在ds1302.c中main.c中就不能用呢?定义在main.c中ds1302.c中就不能用了!该怎么定义呢

在这里使用外部变量并不是一个好的解决方案。

你可以在main.c中调用ds1302.c中的读取函数,然后再显示出来。参考如下示例代码:

//---- ds1302.h
#ifndef _DS1302_H_
#define _DS1302_H_
bool save(TIME timedata[]);
#endif

//---- ds1302.c
#include "ds1302.h"
bool save(TIME timedata[]){
// Save time stamps to timedata
    ...
}

//---- main.c
#incldue "ds1302.h"
void display(TIME timedata[]){
// Display timedata
    ...
}
int main(){
    TIME timedata[];
    save(timedata);
    display(timedata);
}

追问

确实好些!!!还有一个问题,为什么我用stcisp下载程序时,一点击下载蜂鸣器就响,下载完了,先停顿一下,然后再响一秒左右,就不响了,就算手动复位也不响,当然我的程序里确实有让蜂鸣器响起的程序,但是刚下载时明显没有达到条件的,这可能是什么原因呢?

追答

我不会单片机,爱莫能助。
是否是因为非阻塞模式引起的。阻塞模式:请求服务端发送文件时,本程序发生阻塞,等待文件传送完毕;非阻塞:一旦向服务端发送请求,服务端会立刻返回一个状态给程序,然后程序接着运行!,当服务端文件全部发送完再引起程序中断。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-03
定义在哪儿都可以,但是要注意,在非定义的那个文件里使用需要用到外部声明:举例说明
且,需要定义成全局变量
在DS1302.c里定义
unsigned int timedata[10]={0};
在Main.c里使用时需要如下声明
extern unsigned int timedata[10];