前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >extern用法总结!

extern用法总结!

作者头像
全栈程序员站长
发布2022-07-12 16:25:45
5240
发布2022-07-12 16:25:45
举报

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

extern

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

extern 函数原型;

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

#i nclude “stdafx.h”

1.extern用在变量声明中经常有这样一个作用,你在*.c文件里声明了一个全局的变量,这个全局的变量假设要被引用,就放在*.h中并用extern来声明。 2.假设函数的声明中带有keywordextern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有差别: 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;

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/118798.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年12月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档