必威体育Betway必威体育官网
当前位置:首页 > IT技术

external使用方法

时间:2019-10-06 23:43:22来源:IT技术作者:seo实验室小编阅读:81次「手机版」
 

external

转自:http://blog.csdn.net/cameracanon/article/details/4061419

extern

  在源文件A里定义的函数,在其它源文件里是看不见的(即不能访问)。为了在源文件B里能调用这个函数,应该在B的头部加上一个外部声明:

  

extern   函数原型;   

 这样,在源文件B里也可以调用那个函数了。   

 注意这里的用词区别:在A里是定义,在B里是声明。一个函数只能(也必须)在一个源文件里被定义,但是可以在其它多个源文件里被声明。定义引起存储分配,是真正产生那个实体。而声明并不引起存储分配。打一个粗俗的比方:在源文件B里声明后,好比在B里开了一扇窗,让它可以看到A里的那个函数。

#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”在函数声明中可有可无,只是用来标志该函数在本文件中定义,还是在别的文件中定义。只要你函数在使用之前声明了,那么就可以不用包含头文件了。

   VC++6.0中常出现的"unexpected end of file while looking for precompiled header directive"的问题?

如何解决:"fatal ERROR C1010:VC++6.0中常出现的"unexpected end of file while looking for precompiled header directive"的问题?

我想大家在VC6.0中经常回遇到这样的问题,如何解决呢?

1、看看是否缺少“;”,“}”   

如:类,结构体后面的分号

隐藏得深的是宏、.h文件的问题就要费点心思了

2、一定是你在类的部分定义被删除了,M$在每个类中定义一些特殊的常量,是成对的,如下: 

.h: 

#if !defined(AFX_CHILDFRM_H__54CA89DD_BA94_11D4_94D7_0010B503C2EA__INCLUDED_) 

#define AFX_CHILDFRM_H__54CA89DD_BA94_11D4_94D7_0010B503C2EA__INCLUDED_ 

....... 

//{{AFX_INSERT_LOCATION}} 

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MAINFRM_H__54CA89DB_BA94_11D4_94D7_0010B503C2EA__INCLUDED_) 

你可以新建一个类,然后把这些拷贝过去或补上就可以了。   

3、在头部加入 #i nclude "stdafx.h"

4、在CPP文件第一行加上#i nclude "stdafx.h"。 

或者Rebuild All. 

5、

(1). [Project] - [settings] - [C/C++] - [Category] 

(2). 选择 [Precomplied headers]

(3). 单选 [Not Using Precomplied Headers]

(4). [OK]

如果以上不能解决问题,那么就请看以下内容.引起这样的错误,有可能你只是增加了一个.H和.CPP的文件.这时你就要按上面所说.

名含"stdafx.h"即可.如果还要在多个文件里同时使用结构类型,你就要继续向下看了.一定会有不少收获的.

类型的定义和类型变量的定义不同, 

类型定义只是描述一个类型, 

是给编译器看的, 

不会产生可执行代码。 

变量定义是指在执行文件中真实得存在这么一块内容。

因为每个.c里都要写清楚类型定义很麻烦, 

所以一般都把类型定义写在.h里 

,而在.c里采用简单的写法,如struct A a; 

这样定义变量, 

不需把整个类型的描述再写一遍。

------------------------------------------------------------------------ 

所以,struct类型定义放到 XX.h里面, 

XX.cpp 里加struct str st_r; 

XXXXX.cpp加上#i nclude "XX.h" 

然后直接使用extern struct str st_r;

相关阅读

iCloud的使用方法

转载备用http://blog.csdn.net/leonqiu/article/details/78567600http://www.iteye.com/topic/1130328转载自这里:http://www.coco

Firefox使用Poster插件发送post请求

目的:验证http请求功能正确与否,需要发送post,get请求,则可以使用Poster插件方便简单。 自我总结,有什么改正的地方请指出,感激不尽! 1.

VMware下载及安装(含破解码)永久使用

一、介绍VMware(中文名威睿”,纽约证券交易所“代码:VMW)虚拟机软件,是全球桌面到数据中心虚拟化解决方案的领导厂商。全球不同规模的

赚钱宝pro一天多少水晶?迅雷赚钱宝使用必读贴

  赚钱宝pro一天多少水晶?首先,我们还是先弄清什么是赚钱宝,赚钱宝就是迅雷赚钱宝,就是迅雷公司设计研发的一款赚钱类智能硬件。当

如何使用 Linux Cockpit 来管理系统性能 | Linux 中国

Linux Cockpit

分享到:

栏目导航

推荐阅读

热门阅读