.h与.c文件变量引用问题

作者&投稿:蒲媚 (若有异议请与网页底部的电邮联系)
变量在.c和.h文件中定义有什么不同?~

变量啊
.h中定义的是"全局"变量,包括这个头文件就可以用
如果在.c里面看定义的位置也有"全局"和局部之分
如果定义的"全局"的话其它源文件如果使用该变量的话需要extern

#ifndef identifier_h
#define identifier_h
....
#endif
这套条件编译是为了防止同一个.c文件中包含多个相同.h文件的(比如有一个.c文件包含了a.h,a.h又包含了b.h,那么当你在这个.c文件中同时包含了a.h和b.h时,因为有上面的条件编译的关系而不会出错)。因为编译器在编译的时候是按照.c文件为单位编译的,每个.c文件编译成.o文件(linux系统)或者.obj(windows系统),然后再将这些.o文件链接起来,最后与运行库链接形成可执行文件(elf或exe文件)。

你在两个.c文件中包含了同一个.h文件。这根本和条件编译没什么关系。你在.h文件中定义了全局变量a, b, c。那么就表示你两个.c文件中,每个.c文件中都有这样的全局变量定义:int a, b, c;当每个.c文件单独编译当然没有问题,但是当它们链接起来的时候就出现问题了:两个.c文件中都有变量a b c,所以当然是重复定义啊。问题是出在链接的时候的。

#i nclude "stdafx.h"
1.extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。
2.如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有区别:
extern int f(); 和int f();
=================================
如果定义函数的c/cpp文件在对应的头文件中声明了定义的函数,那么在其他c/cpp文件中要使用这些函数,只需要包含这个头文件即可。
如果你不想包含头文件,那么在c/cpp中声明该函数。一般来说,声明定义在本文件的函数不用“extern”,声明定义在其他文件中的函数用“extern”,这样在本文件中调用别的文件定义的函数就不用包含头文件
include “*.h”来声明函数,声明后直接使用即可。
=================================
举个例子:
//extern.cpp内容如下:

// extern.cpp : Defines the entry point for the console application.
//

#i nclude "stdafx.h"
extern print(char *p);
int main(int argc, char* argv[])
{
char *p="hello world!";
print(p);
return 0;
}
//print.cpp内容如下
#i nclude "stdafx.h"
#i nclude "stdio.h"
print(char *s)
{
printf("The string is %s\n",s);
}

结果程序可以正常运行,输出结果。如果把“extern”去掉,程序依然可以正常运行。

由此可见,“extern”在函数声明中可有可无,只是用来标志该函数在本文件中定义,还是在别的文件中定义。只要你函数在使用之前声明了,那么就可以不用包含头文件了。
.
希望能够帮助你 ^_^ 也希望能够选为最佳答案!

可以。这是因为temp作为一个全局变量,在内存中只有一份。a.h被b.c包含,b.c中对temp的操作会直接修改temp在内存里的值。因为使用了include,所以不需要extern。

应该可以。c语言的编译过程是以一个个.c文件为基本单位编译的,而include头文件指令是预编译指令,会在.c文件中,把include的头文件的文件内容Copy进来。
而main是Win32控制台程序的入口,当然在执行pintf之前func已经被执行了。

你在编译器上试试就清楚了。。。结果是:可以。


.h与.c文件变量引用问题
#i nclude "stdafx.h"1.extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。2.如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有区别:ext...

变量在.c和.h文件中定义有什么不同?
.h中定义的是"全局"变量,包括这个头文件就可以用 如果在.c里面看定义的位置也有"全局"和局部之分 如果定义的"全局"的话其它源文件如果使用该变量的话需要extern

C语言中 .c和.h有什么区别
在C语言编程中,.c和.h文件扮演着不同的角色,它们之间的区别主要体现在功能、用法和作用上。首先,让我们来看它们的不同含义:.h文件,通常称为头文件,主要作用是声明同名的.c文件中定义的变量、数组和函数。这些声明是为了让其他.c文件能够知道它们的存在,但函数的具体实现并不在.h文件中。.c文...

C语言中 .h文件和.c文件区别
1. 功能含义:.h文件,也称为头文件,主要用于声明函数、变量以及常量等,它不包含函数的具体实现。而.c文件,负责编写函数的详细实现代码,以及执行逻辑。2. 用法上的区别:当在.h文件中定义一个函数,它只是告诉其他.c文件该函数的存在,实际的代码不会被包含。如果多个.c文件都引用这个.h文件,编...

c语言中.c和.h有什么区别
在C语言中,.c和.h文件有各自独特的用途和含义。详细解释:1. .c文件 .c文件是C语言中的源代码文件,通常包含具体的函数实现、变量定义等。它是编译单元,意味着编译器会单独编译每一个.c文件,将其转换为目标文件。在项目中,每个.c文件通常对应一个模块或功能。例如,如果你有一个名为“math_...

c语言的头文件. h和. c有啥不同?
一、意思不同 .h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。.c文件一般放的是变量、数组、函数的具体定义。二、用法不同 .c文件,以c为扩展名,一般存储具体功能的实现。.h文件,称为头文件,一般存储类型的定义,函数的声明等。通常,头文件被.c文件包含,...

keil中 两个.c文件调用同一个全局变量 .h头文件中定义全局变量
在一个C文件中定义你需要的变量 在另一个C文件用EXTERN声明一下 就可以用了

. h和. c有什么区别?
一、含义差异 .h文件通常包含数据类型、宏定义、外部变量和函数原型声明,目的是为了让其他文件能够访问和使用这些声明的函数或数据。而.c文件包含的是函数的具体实现代码和局部变量的定义。二、使用方式差异 .c文件包含实现特定功能的代码。.h文件,也被称作头文件,它包含的是类型定义、宏、外部变量声明...

keil下的.c文件和.h文件分别代表什么意思?
。c表示源文件,程序的原型,变量的定义 。h文件表示声明变量和函数。别的c文件可以包含他。

两个.c和.h头文件引用文件
首先要理解程序的执行过程:源程序-》预处理-》编译-》汇编-》链接 程序执行时,经过预处理把一些不必要的信息去掉,比如说注释。编译时,会把t.h头文件的内容拷贝到a.c或b.c,两个过程是没有影响的。不会出现一边不能使用.h头文件中变量的情况。

雄县13632202571: .h与.c文件变量引用问题 -
线河硫酸: #i nclude "stdafx.h" 1.extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明. 2.如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的...

雄县13632202571: 单片机工程中的多个C文件和H文件的使用 -
线河硫酸: 1.所有函数定义到对应名称的H文件中(要有防重复引用机制) 2.所有H文件在一个“Includes.H”中包含 3.在所有C文件中包含“Includes.H”这样修改方便,一劳永逸. 缺点是:所有外部函数都对整个工程可见,编译速度相对下降我的项目基本都是这个结构,推荐使用!

雄县13632202571: 怎样解决C头文件相互引用的问题 -
线河硫酸: #pragma once 或者 #ifndef ***_H #define ***_H 定义内容 #endif

雄县13632202571: C语言 头文件相互引用的问题 -
线河硫酸: 增加头文件c.h包含a.h,b.h 声明void testb(); 在c.c内实现testb(); 另外防止头文件被多次包含时重复定义 需要用#ifndef#define ````#endif 来修饰头文件内容 以防止重复编译

雄县13632202571: 两个.c和.h头文件引用文件 -
线河硫酸: IDE的一个工程可能只能对应一个可执行文件,例如VC++中,一个工程生成一个.exe.既然是两个C程序,就不要在一个工程中编译.如果是两个源文件组成一个程序,那么分别编译然后链接即可(一般IDE执行全编译时会分别执行命令行编译...

雄县13632202571: C语言 有很多.h和.c文件,然后一个.c文件中的函数会调用另一个.c文件中的函数,要怎样才能保证才不会 -
线河硫酸: 楼主你好..h文件作为接口存在的.所谓接口就是指类型定义、变量声明、函数声明等等,基本上不会在.h里面放置函数实现..c里面才真正实现函数.比方说,我写一个work的实现://work.h#ifndef work_h#define work_h//你也可以在这里声明变...

雄县13632202571: 在应用其他文件的全局变量时,如果变量定义在.c,说没定义,定义到.h,说多重定义. -
线河硫酸: 在调用的c文件中extern 变量类型 全局变量名; 这样引用.

雄县13632202571: 关于C语言中变量在两个.C文件中的调用问题 -
线河硫酸: 我有几个方案,我经常在VC下使用,都没问题,你试试:方案1:在一个文件中定义全局变量“类型 tmp;”,注意是全局变量.另一个文件全局变量的位置使用“extend 类型 tmp;”.方案2:把hal.c文件里的函数参数加一个指向tmp的指针,...

雄县13632202571: keil MDK做stm32工程文件时候,**.c文件中的头文件的引用,问题如下,一定采纳,跪求、、、、 -
线河硫酸: 头文件包含路径是需要设置的,你可以在 include path 中设置你头文件(.h)的位置比如说:你的头文件在 你就需要设置路径:这样就能够打开,编译也能通过了

雄县13632202571: C语言中.h函数声明文件 和.c函数实现文件是怎么连接的 -
线河硫酸: .c是源文件,源文件不是引用了.h头文件吗,#include"***.h",也就是将头文件的内容插入到了源文件中了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网