1楼:南京新华电脑专修学院
我有几个方案,我经常在vc下使用,都没问题,你试试:
方案1:在一个文件中定义全局变量“类型 tmp;”,注意是全局变量。另一个文件全局变量的位置使用“extend 类型 tmp;”。
方案2:把hal.c文件里的函数参数加一个指向tmp的指针,tmp在main中,在hal.c里的文件使用tmp时,把地址传过去就行了。
例如:mian()
function(&tmp;...;...);
...}
在hal.c里面
function(char *tmp;...;...)
这样就行了
方案1、2都不用hal.h
方案3:你把hal.c的子函数写进hal.h,在mian函数之前include一下就行了。
但不推荐此方法。
对你出现的问题的理解:
你在hal.h中声明了tmp,在两个文件里都包含它,表示包含了两次,c语言规定如果没有限定为局部变量,则各个文件都可以调用,这就导致你声明了两个名称相同的同类型变量,当然不行。
如果定义为局部变量,那么另一个文件就没办法用它了,或者这么说:两个文件各有一个tmp但不是同一个tmp,改变一个的值,另一个不变。
常用方法就是extend一下(方案1)。
顺便说一句,我从来没用过unsigned char类型,因为char类型本身就是非负的,可能是因为编译器的关系吧
2楼:匿名用户
注意,定义和声明是不同的!你的做法是避免了重复声明,但是你在头文件中做了变量的定义,变量是不能重复定义的~~
如果你要在多个文件中都使用的话,在
#ifndef hal_h
#define hal_h
extern unsigned char tmp; //**状态 第几张
#endif
在在某个cpp文件中进行定义
#include "**.h"
unsigned char tmp=0;
我刚调试出来,呵呵,祝你好运
3楼:生如红莲
unsigned char tmp=0; 这个是定义不是申明。所以两个c文件include了他会造成重定义。
申明应该为unsigned char temp;
为了使两个c文件访问的temp为同一个,申明需要修改为:
extern unsigned char temp;
然后再hal.c里面定义该变量:
unsigned char temp = 0;
这样就不会出错了。
4楼:_baby小人
加个static修饰符试试,即
static unsigned char tmp=0;
5楼:百度网友
是不是要定义成全局变量
如何在一个c文件中调用另外一个c文件中的变量
6楼:匿名用户
变量用extern修饰, 或者直接包含头文件,但是这个变量必须是在.h文件中
7楼:刀无极啊
变量要定义为全局变量,就是要在函数体外面定义变量,同时不能加关键字static静态的,静态全局变量只能在本文件内使用,你先在一个文件中定义变量,比如:
#include
int a;
int main()
在另外的文件中,如果你想要使用变量a,那么首先要extren int a;extren关键字的意思是到其他文件中寻找,这样你就可以在其他文件中使用变量a了,注意全局变量会自动初始化为0,如果你不初始化,同时全局变量的值会保存到静态存储区直到整个程序运行结束的
如何在一个.c文件里调用另一个.c文件里的变量
8楼:可以叫我表哥
/* b.c调用a.c里的foo() /*//===a.h===
void foo();
//===a.c===
#include "a.h"
void foo()
//===b.c===
#include "a.h"
int main()
或者直接在b.c头部加上声明void foo();也行。
9楼:
假设被调用的c文件为func.c,则被调用的全局变量需被定义在文件开始处,即与头文件、宏定义、函数声明在一起
#include
#define key abcd
int globalcnt;//这就是被调用的全局变量定义,与函数内部定义变量完全一样
假设调用全局变量的c文件为caller.c,则在该文件中需要声明被调用的全局变量为外部变量,同样该声明与头文件、宏定义、函数声明在一起
#include
extern int globalcnt;//声明了globalcnt是一个整型的外部变量,然后你在函数中可以像使用局部变量一样使用globalcnt了
10楼:匿名用户
//a.c
#include
#include
int s;
extern void fun2();
void main()
//b.c
#include
#include
extern int s;
void fun2()
这是关于c语言的问题:一个工程中有两个文件,如何在一个文件中调用另
11楼:凡赐疵级掷舜刚
当然可以啦。举个例子吧:两个文件 main.
c function.c我们在function.c 中写一个函数 func();与此同时,我们需要写一个.
h文件来声明这个函数,即function.h// 以下是function.h 的内容#ifndef __function_h__#define __function_h__void func();#endif// 以下是function.
c 的内容#include "function.h"void func()这样一来,我们想要在另外一个文件,也就是main.c 中调用这个函数的时候,只需要包含它对应的头文件,就可以直接调用了。
// 以下是main.c 的内容#include "stdio.h"#include "function.
h"int main()
关于switch语句的使用问题,关于C语言问题中switch语句的使用问题
1楼 下海的孤魂 switch结构里少了default语句。 应该如下这样,所有case完成后,最下面加上一个default。 以后请教大家时,出错信息里把行数也拷贝上来,可以更快地看出问题出在 。比如 warning c4060。。。 之前,应该还有出错的行数信息的。 switch int a 1...
关于C语言中long型数据赋给int型变量
1楼 匿名用户 区分编译器类型,long数据赋值给int数据会有不同的结果。 1 16位编译器 int型变量占2字节,long类型变量占4字节。当long赋值给int时,会截取低两字节数据给int。 如long a 0x12345678 int b a 则b的值为0x5678。 2 32位编译器 i...
在c语言中指针变量有什么实际的作用
1楼 想不到名字啊呜 构建动态数组啊 使被调函数修改主调函数的变量啊 获取 的地址啊 太多了,多到我都忘的差不多了 没有指针c就不叫c了,可以说是c里面最重要,也是最难学的部分嘛,主要还是考试要 c语言的指针有什么实际作用? 2楼 匿名用户 指针实际上就是一个内存地址,比如一个函数指针,就是一个函数...