关于c语言中变量在两个c文件中的调用问题

2021-05-02 22:09:45 字数 3205 阅读 8460

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楼 匿名用户 指针实际上就是一个内存地址,比如一个函数指针,就是一个函数...